00001
00002
00003
00004 #include <math.h>
00005
00006 #include <StEventTypes.h>
00007 #include <StEvent.h>
00008 #include <TStopwatch.h>
00009 #include <TString.h>
00010
00011 #include <StEmcUtil/others/emcDetectorName.h>
00012 #include <StEmcUtil/geometry/StEmcGeom.h>
00013
00014
00015 #include <StDaqLib/GENERIC/EventReader.hh>
00016 #include <StDaqLib/EMC/EMC_Reader.hh>
00017 #include <StDAQMaker/StDAQReader.h>
00018 #include <StEmcUtil/database/StEmcDecoder.h>
00019 #include <StMessMgr.h>
00020
00021
00022 #include <StEEmcUtil/database/StEEmcDb.h>
00023 #include <StEEmcUtil/database/EEmcDbCrate.h>
00024
00025 #include "StEmcRawMaker.h"
00026 #include "StEemcRaw.h"
00027
00028 ClassImp(StEmcRawMaker)
00029
00030
00031
00032
00033
00034 StEmcRawMaker::StEmcRawMaker(const char *name):StRTSBaseMaker(name)
00035 {
00036 m_Mode = 0;
00037 mEvent = 0;
00038 mBemcRaw = new StBemcRaw();
00039
00040
00041 mBemcRaw->towerMapBug(kFALSE);
00042 mBemcRaw->psdMapBug2(kFALSE);
00043 mBemcRaw->smdMapBug(kFALSE);
00044
00045 mEemcRaw = new StEemcRaw();
00046 eeStDb=0;
00047 }
00048
00049
00053 StEmcRawMaker::~StEmcRawMaker()
00054 {}
00055
00056
00060 Int_t StEmcRawMaker::Init()
00061 {
00062
00063 if(IAttr("BEmcCheckStatus")) {
00064 LOG_INFO << "StEmcRawMaker will suppress hits from towers with bad status" << endm;
00065 mBemcRaw->getControlTable()->CheckStatus[0] = 1;
00066 }
00067
00068 TString EmcOpts = SAttr(".gopt.emc");
00069 if (EmcOpts.IsHex()) {
00070 Int_t optionMap[] = {0, 2, 4, 4, 1, 3, 5, 5};
00071 controlADCtoE_st* tab = mBemcRaw->getControlTable();
00072 for(Int_t i=0; i<MAXDETBARREL; i++) {
00073 Int_t optI;
00074 TString optIs = EmcOpts(optionMap[i],1);
00075 sscanf(optIs.Data(),"%x",&optI);
00076 tab->CheckStatus[i] = (optI>>0) & 1;
00077 tab->CutOffType[i] = (optI>>1) & 1;
00078
00079 }
00080 }
00081
00082 mBemcRaw->initHisto();
00083 mBemcRaw->printConf();
00084 if((m_Mode&0x1)==1)
00085 {
00086 LOG_INFO << "Setting BEMC debug Mode -> save all hits into StEvent"<<endm;
00087 mBemcRaw->saveAllStEvent(kTRUE);
00088 mBemcRaw->initQAHisto();
00089 }
00090
00091 eeStDb = (StEEmcDb*)this->GetDataSet("StEEmcDb");
00092 if(eeStDb==0)
00093 {
00094 LOG_ERROR << "FATAL !!! \n did not found \"eeDb-maker\", all EEMC data will be ignored\n fix it, JB\n" <<endm;
00095 }
00096
00097 mEemcRaw->initHisto();
00098
00099 if (IAttr(".histos"))
00100 {
00101
00102
00103
00104
00105 }
00106
00107
00108
00109 assert(mBemcRaw->getControlTable()->CutOffType[2]==mBemcRaw->getControlTable()->CutOffType[3]);
00110
00111 if(mBemcRaw->getControlTable()->CutOffType[2]){
00112 mBemcRaw->getControlTable()->DeductPedestal[2] = 0;
00113 mBemcRaw->getControlTable()->DeductPedestal[3] = 0;
00114 }
00115 if(mBemcRaw->getControlTable()->CutOffType[1]){
00116 mBemcRaw->getControlTable()->DeductPedestal[1] = 0;
00117 }
00118 return StMaker::Init();
00119 }
00120
00121
00122
00126 Int_t StEmcRawMaker::InitRun(Int_t runNumber)
00127 {
00128
00129 LOG_INFO <<"Getting database tables for the BEMC detector "<<endm;
00130 mBemcRaw->createDecoder(GetDate(),GetTime());
00131 mBemcRaw->getTables()->loadTables((StMaker*)this);
00132
00133
00134
00135 LOG_INFO << "(" << runNumber << ")" << endm;
00136
00137 if(eeStDb==0)
00138 {
00139 LOG_ERROR << "did not found \"eeDb-maker\", all EEMC data will be ignored\n\n"<<endm;
00140 }
00141 else if ( eeStDb->valid()==0 )
00142 {
00143 LOG_ERROR << "found \"eeDb-maker\", but without any DB data, all EEMC data will be ignored\n\n"<<endm;
00144 eeStDb=0;
00145 }
00146 else
00147 {
00148
00149 }
00150 mEemcRaw->setDb(eeStDb);
00151 return StMaker::InitRun(runNumber);
00152 }
00153
00154
00158 Int_t StEmcRawMaker::Finish()
00159 {
00160 return kStOk;
00161 }
00162
00163 void StEmcRawMaker::setPrint(Bool_t a)
00164 {
00165 LOG_INFO << "this function is obsolete. Use logger config file to set verbosity instead." << endm;
00166 }
00167
00171 Int_t StEmcRawMaker::Make()
00172 {
00173 TStopwatch clock;
00174 clock.Start();
00175 LOG_DEBUG <<"StEmcRawMaker::Make()******************************************************************"<<endm;
00176 if(!prepareEnvironment())
00177 { LOG_WARN <<"Could not prepare the environment to process the event "<<endm; }
00178
00179 if(!makeBemc())
00180 { LOG_WARN <<"Could not process BEMC information properly "<<endm; }
00181
00182 if(!makeEemc())
00183 { LOG_WARN <<"Could not process EEMC information properly "<<endm; }
00184
00185 fillHistograms();
00186 clock.Stop();
00187 LOG_DEBUG <<"Time to run StEmcRawMaker::Make() real = "<<clock.RealTime()<<" cpu = "<<clock.CpuTime()<<endm;
00188 LOG_DEBUG <<"*******************************************************************************************"<<endm;
00189
00190
00191
00192 if( mEvent->id()%555 ) {
00193 int i;
00194 StEmcRawData *eemcRaw = mEvent->emcCollection()->eemcRawData();
00195 for (i=0; i<eemcRaw->getNBlocks();i++) eemcRaw->deleteBank(i);
00196 StEmcRawData *bemcRaw = mEvent->emcCollection()->bemcRawData();
00197 for (i=0; i<bemcRaw->getNBlocks();i++) bemcRaw->deleteBank(i);
00198 } else {
00199 LOG_INFO<< Form("B+EmcRawData are retained for eve=%d\n",mEvent->id())<<endm;
00200 }
00201 return kStOK;
00202 }
00203
00207 Bool_t StEmcRawMaker::prepareEnvironment()
00208 {
00209 mEvent = 0;
00210
00211 LOG_DEBUG <<"Get StEvent pointer and make it ready for filling"<<endm;
00213
00214
00215 mEvent = (StEvent*)GetInputDS("StEvent");
00216 StEmcCollection *emc = NULL;
00217
00218 if(mEvent)
00219 {
00220 emc = mEvent->emcCollection();
00221 }
00222 else
00223 {
00224 mEvent = new StEvent();
00225 AddData(mEvent);
00226 emc = mEvent->emcCollection();
00227 }
00228
00229 if(!emc)
00230 {
00231 emc = new StEmcCollection();
00232 mEvent->setEmcCollection(emc);
00233 LOG_DEBUG << "::prepareEnvironment() has added a non existing StEmcCollection()"<<endm;
00234 }
00235
00236 StEmcRawData *bemcRaw = emc->bemcRawData();
00237 if(bemcRaw)
00238 {
00239 LOG_WARN << "::prepareEnvironment() found old StEmcRawData *bemcRaw. Will delete it and create a new one"<<endm;
00240 delete bemcRaw;
00241 }
00242 bemcRaw = new StEmcRawData();
00243 emc->setBemcRawData(bemcRaw);
00244
00245 StEmcRawData *eemcRaw = emc->eemcRawData();
00246 if(eemcRaw)
00247 {
00248 LOG_FATAL << "::prepareEnvironment() found old StEmcRawData *eemcRaw, TOTAL failure,\n STOP this chain, JB"<<endm;
00249 delete eemcRaw;
00250 }
00251 eemcRaw = new StEmcRawData();
00252 emc->setEemcRawData(eemcRaw);
00253
00254
00255
00257
00258 return kTRUE;
00259 }
00260
00261
00265 Bool_t StEmcRawMaker::makeBemc()
00266 {
00267 LOG_DEBUG <<"Copying BEMC information from DAQ structure "<<endm;
00268
00269 if(GetDate() < 20081101){
00270 TDataSet* TheData = GetDataSet("StDAQReader");
00271 if(!TheData){
00272 LOG_ERROR <<"Could not find DAQ Reader "<<endm;
00273 return kFALSE;
00274 }
00275 mBemcRaw->setDate(GetDate());
00276 mBemcRaw->getTables()->loadTables((StMaker*)this);
00277 return mBemcRaw->make(TheData,mEvent);
00278 }
00279 mBemcRaw->setDate(GetDate());
00280 mBemcRaw->getTables()->loadTables((StMaker*)this);
00281 return mBemcRaw->make((StEmcRawMaker*)this,mEvent);
00282 }
00283
00284
00288 Bool_t StEmcRawMaker::makeEemc()
00289 {
00290 LOG_DEBUG <<"Copying EEMC information from daqReader->StEvent "<<endm;
00291
00292 if(GetDate() < 20081101){
00293 St_DataSet *daq = GetDataSet("StDAQReader");
00294
00295 if (! daq){
00296 LOG_ERROR << "::makeEemc() , StDAQReader not available" << endm;
00297 return false;
00298 }
00299
00300 StDAQReader *fromVictor = (StDAQReader*) (daq->GetObject());
00301
00302 if (!fromVictor ){
00303 LOG_ERROR << "::makeEemc() , daq->GetObject() failed" << endm;
00304 return false;
00305 }
00306
00307 StEEMCReader *eeReader = fromVictor->getEEMCReader();
00308 if(!eeReader)
00309 return false ;
00310
00311 if (! eeReader){
00312 LOG_ERROR << "::makeEemc() , fromVictor->getEEMCReader() failed" << endm;
00313 return false;
00314 }
00315 return mEemcRaw->make(eeReader,mEvent);
00316 }
00317 return mEemcRaw->make( (StEmcRawMaker*)this,mEvent );
00318 }
00319
00320
00324 void StEmcRawMaker::fillHistograms()
00325 {
00326 if(mBemcRaw)
00327 mBemcRaw->fillHisto();
00328 }
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404
00405
00406
00407
00408