00001 #include "mEmcRecoModuleSimulationYear3.h"
00002
00003 #include "PHCompositeNode.h"
00004 #include "PHFlag.h"
00005
00006
00007 #include "dEmcRawDataWrapper.h"
00008 #include "dEmcFEMDataWrapper.h"
00009 #include "dEmcDCMDataWrapper.h"
00010 #include "dEmcGeaTrackTowerWrapper.h"
00011 #include "dEmcGeaTrackWrapper.h"
00012 #include "dEmcGeaTowerTrackWrapper.h"
00013 #include "dEmcGeaClusterTrackWrapper.h"
00014 #include "dEmcGeaTrackClusterWrapper.h"
00015 #include "dEmcGeaParamsWrapper.h"
00016 #include "dEmcGeaHitWrapper.h"
00017 #include "dEmcRespParWrapper.h"
00018 #include "dEmcGeometryWrapper.h"
00019 #include "emcparWrapper.h"
00020
00021
00022 #include "mEmcApplyQAToSimu.h"
00023 #include "mEmcClusterizerv0.h"
00024 #include "mEmcDCMToRawModule.h"
00025 #include "mEmcDefGeomModule.h"
00026 #include "mEmcFEMToDCMModule.h"
00027 #include "mEmcGeaEventModule.h"
00028 #include "mEmcGeaGetHits.h"
00029 #include "mEmcGeaMakeCalibTower.h"
00030 #include "mEmcGeaMakeClusterEvaluation.h"
00031 #include "mEmcGeaParamsModule.h"
00032 #include "mEmcGeaMakeRawModule.h"
00033 #include "mEmcGeaPatchSimulatedCluster.h"
00034 #include "mEmcGeaTrackModule.h"
00035 #include "mEmcGeometryModule.h"
00036 #include "mEmcGetDCMModule.h"
00037 #include "mEmcPRDFToRawModule.h"
00038 #include "mEmcPutDCMLongModule.h"
00039 #include "mEmcRawToFEMModule.h"
00040 #include "mEmcRawToLongModulev1.h"
00041 #include "mEmcToolsModule.h"
00042 #include "mEmcMaskDeadTowers.h"
00043
00044
00045 #include "emcBadModulesv1.h"
00046 #include "emcDataManager.h"
00047 #include "emcTimeStamp.h"
00048
00049 #include "emcNodeHelper.h"
00050 #include "emcClusterContainerv1S.h"
00051 #include "emcTowerContainerv1S.h"
00052 #include "recoConsts.h"
00053 #include "emcDBMS.h"
00054
00055 #include <cassert>
00056 #include <cstdlib>
00057 #include <iostream>
00058 #include <memory>
00059
00060 using namespace std;
00061
00062 const float mEmcRecoModuleSimulationYear3::fgTowerThresholdPbSc = 0.010;
00063 const float mEmcRecoModuleSimulationYear3::fgTowerThresholdPbGl = 0.014;
00064 const float mEmcRecoModuleSimulationYear3::fgMinClusterEnergyPbSc = 0.015;
00065 const float mEmcRecoModuleSimulationYear3::fgMinClusterEnergyPbGl = 0.060;
00066
00067
00068 mEmcRecoModuleSimulationYear3::mEmcRecoModuleSimulationYear3
00069 (const PHFlag& flags)
00070 {
00071 const recoConsts* rc = dynamic_cast<const recoConsts*>(&flags);
00072 assert(rc!=0);
00073
00074 if ( flags.FlagExist("EVALUATIONFLAG") &&
00075 flags.get_IntFlag("EVALUATIONFLAG") )
00076 {
00077 fEvaluation = true;
00078 }
00079 else
00080 {
00081 fEvaluation = false;
00082 }
00083
00084 fSimulationFlag = flags.get_IntFlag("SIMULATIONFLAG");
00085
00086 assert(fSimulationFlag==2);
00087
00088 int runnumber = 0;
00089
00090 if ( flags.FlagExist("RUNNUMBER") )
00091 {
00092 runnumber = flags.get_IntFlag("RUNNUMBER");
00093 }
00094
00095 fDataSource = emcDBMS::get();
00096
00097 if ( flags.FlagExist("EMCDATASOURCE") )
00098 {
00099 emcManageable::EStorage ds =
00100 emcManageable::GetStorage(flags.get_CharFlag("EMCDATASOURCE"));
00101 if ( ds == emcManageable::kNone )
00102 {
00103 cerr << "mEmcRecoModuleSimulationYear3::"
00104 << "mEmcRecoModuleSimulationYear3 "
00105 << "Flag EMCDATASOURCE=" << flags.get_CharFlag("EMCDATASOURCE")
00106 << " is not valid. Using default="
00107 << emcManageable::GetStorageName(fDataSource)
00108 << endl;
00109 }
00110 else
00111 {
00112 fDataSource = ds;
00113 }
00114 }
00115
00116 emcTimeStamp ets;
00117 ets.SetSource(fDataSource);
00118
00119 emcDataManager* dm = emcDataManager::GetInstance();
00120
00121 bool ok = dm->Read(ets,runnumber);
00122
00123 assert(ok==true);
00124
00125 fTimeStamp = ets.getTimeStamp();
00126
00127 std::cout << "<I> mEmcRecoModuleSimulationYear3 : Using TimeStamp: ";
00128 fTimeStamp.print();
00129 std::cout << std::endl;
00130
00131 PHTimeStamp y1999(1999,1,1,0,0,0);
00132
00133 assert( fTimeStamp > y1999 );
00134
00135 fModules = new emcModuleHelper;
00136 }
00137
00138
00139 mEmcRecoModuleSimulationYear3::~mEmcRecoModuleSimulationYear3()
00140 {
00141 delete fModules;
00142 }
00143
00144
00145 int
00146 mEmcRecoModuleSimulationYear3::ana(PHCompositeNode* topNode)
00147 {
00148 return fModules->event(topNode);
00149 }
00150
00151
00152 int
00153 mEmcRecoModuleSimulationYear3::end(PHCompositeNode* topNode)
00154 {
00155 return 0;
00156 }
00157
00158
00159 int
00160 mEmcRecoModuleSimulationYear3::setup(PHCompositeNode* topNode)
00161 {
00162
00163
00164 const int N = 1;
00165
00166 const char* nodes[] = { "EMC" } ;
00167
00168 for ( int i = 0; i < N; ++i )
00169 {
00170 if ( !emcNodeHelper::makeCompositeNode(topNode,nodes[i],"-p") )
00171 {
00172 return i+1;
00173 }
00174 }
00175
00176
00177
00178 PHCompositeNode* emcNode = emcNodeHelper::findCompositeNode(topNode,"EMC");
00179 PHCompositeNode* dcmNode = emcNodeHelper::findCompositeNode(topNode,"DCM");
00180 PHCompositeNode* evaNode = emcNodeHelper::findCompositeNode(topNode,"EVA");
00181 PHCompositeNode* parNode = emcNodeHelper::findCompositeNode(topNode,"PAR");
00182 PHCompositeNode* geaNode = emcNodeHelper::findCompositeNode(topNode,"GEA");
00183 PHCompositeNode* dstNode = emcNodeHelper::findCompositeNode(topNode,"DST");
00184
00185 assert(emcNode!=0);
00186 assert(dcmNode!=0);
00187 assert(evaNode!=0);
00188 assert(parNode!=0);
00189 assert(dstNode!=0);
00190
00191
00192 emcNodeHelper::addTable<dEmcRawDataWrapper>(emcNode,"dEmcRawData",25000);
00193
00194 emcNodeHelper::addTable<dEmcFEMDataWrapper>(emcNode,"dEmcFEMData",500);
00195
00196
00197 emcNodeHelper::addTable<dEmcDCMDataWrapper>(dcmNode,"dEmcDCMData",500);
00198
00199
00200 emcNodeHelper::addTable<dEmcGeaTrackTowerWrapper>
00201 (evaNode,"dEmcGeaTrackTower",15000);
00202
00203 emcNodeHelper::addTable<dEmcGeaTowerTrackWrapper>
00204 (evaNode,"dEmcGeaTowerTrack",15000);
00205
00206 emcNodeHelper::addTable<dEmcGeaTrackWrapper>(evaNode,"dEmcGeaTrack",7500);
00207
00208
00209 emcNodeHelper::addTable<dEmcGeaParamsWrapper>(parNode,"dEmcGeaParams",8);
00210
00211 dEmcRespParWrapper* dEmcRespPar =
00212 emcNodeHelper::addTable<dEmcRespParWrapper>(parNode,"dEmcRespPar",1);
00213 setupResponse(dEmcRespPar);
00214
00215
00216 emcNodeHelper::addTable<dEmcGeometryWrapper>(parNode,"dEmcGeometry",30000);
00217
00218 emcNodeHelper::addTable<emcparWrapper>(parNode,"emcpar",8);
00219
00220
00221 bool transient = true;
00222 emcNodeHelper::addTable<dEmcGeaHitWrapper>
00223 (geaNode,"dEmcGeaHit",525000,transient);
00224
00225
00226
00227 emcNodeHelper::addObject<emcTowerContainerv1S>(dstNode,"emcTowerContainer");
00228
00229
00230 if ( fEvaluation )
00231 {
00232 setupEvaluation(topNode);
00233 }
00234
00235
00236
00237 setupBadModules(topNode);
00238
00239
00240
00241 setupAna(topNode);
00242
00243 topNode->print();
00244
00245 return 0;
00246 }
00247
00248
00249 void
00250 mEmcRecoModuleSimulationYear3::setupAna(PHCompositeNode* topNode)
00251 {
00252 assert(fSimulationFlag==2);
00253
00254
00255 fModules->add(new mEmcGeaGetHits);
00256 fModules->add(new mEmcGeaParamsModule,emcModuleHelper::kFirstEventOnly);
00257 fModules->add(new mEmcGeaEventModule);
00258 fModules->add(new mEmcGeaMakeRawModule);
00259 fModules->add(new mEmcGeaTrackModule);
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269 fModules->add(new mEmcGeaMakeCalibTower);
00270
00271
00272 fModules->add(new mEmcApplyQAToSimu);
00273
00274
00275 recoConsts *rc = recoConsts::instance();
00276 if (rc->FlagExist("EMCDEADRECALDATASOURCE"))
00277 fModules->add(new mEmcMaskDeadTowers);
00278
00279 setupClustering(topNode);
00280
00281
00282
00283
00284 fModules->add(new mEmcGeaPatchSimulatedCluster);
00285
00286 if ( fEvaluation )
00287 {
00288 fModules->add(new mEmcGeaMakeClusterEvaluation);
00289 }
00290
00291 cout << "mEmcRecoModuleSimulationYear3::setupAna : module list : "
00292 << endl;
00293
00294 fModules->print();
00295 }
00296
00297
00298 void
00299 mEmcRecoModuleSimulationYear3::setupBadModules(PHCompositeNode* topNode)
00300 {
00301 bool init = true;
00302 emcBadModules::EInformationOrigin origin = emcBadModules::kAll;
00303
00304 emcBadModules* bm = new emcBadModulesv1(fTimeStamp,origin,
00305 fDataSource,init);
00306
00307 PHCompositeNode* emcNode =
00308 emcNodeHelper::findCompositeNode(topNode,"EMC");
00309
00310 assert(emcNode!=0);
00311 emcNodeHelper::insertObject<emcBadModules>(emcNode,bm,"emcBadModules");
00312 }
00313
00314
00315 void
00316 mEmcRecoModuleSimulationYear3::setupClustering(PHCompositeNode* topNode)
00317 {
00318 emcNodeHelper nh;
00319
00320 PHCompositeNode* dstNode = nh.findCompositeNode(topNode,"DST");
00321
00322 nh.addObject<emcClusterContainerv1S>(dstNode,"emcClusterContainer");
00323
00324 PHCompositeNode* parNode = nh.findCompositeNode(topNode,"PAR");
00325
00326 mEmcGeometryModule* geometryModule =
00327 new mEmcGeometryModule(mEmcGeometryModule::kPISA);
00328 PHIODataNode<TObject>* geometryNode
00329 = new PHIODataNode<TObject>(geometryModule, "mEmcGeometry");
00330 parNode->addNode(geometryNode);
00331
00332 mEmcClusterizerv0* clusterizer = new mEmcClusterizerv0(geometryModule);
00333
00334 clusterizer->SetTowerThresholdPbSc(fgTowerThresholdPbSc);
00335 clusterizer->SetTowerThresholdPbGl(fgTowerThresholdPbGl);
00336 clusterizer->SetMinClusterEnergyPbSc(fgMinClusterEnergyPbSc);
00337 clusterizer->SetMinClusterEnergyPbGl(fgMinClusterEnergyPbGl);
00338
00339 fModules->add(clusterizer);
00340 }
00341
00342
00343 void
00344 mEmcRecoModuleSimulationYear3::setupEvaluation(PHCompositeNode* topNode)
00345 {
00346 PHCompositeNode* evaNode = emcNodeHelper::findCompositeNode(topNode,"EVA");
00347 assert(evaNode!=0);
00348
00349 emcNodeHelper::addTable<dEmcGeaTrackClusterWrapper>
00350 (evaNode,"dEmcGeaTrackCluster",7500);
00351 emcNodeHelper::addTable<dEmcGeaClusterTrackWrapper>
00352 (evaNode,"dEmcGeaClusterTrack",7500);
00353 }
00354
00355
00356 void
00357 mEmcRecoModuleSimulationYear3::setupResponse(dEmcRespParWrapper* respPar)
00358 {
00359 respPar->SetRowCount(1);
00360 respPar->set_anyset(0,1);
00361 respPar->set_sim_timing(0,0);
00362 respPar->set_pbgl_response(0,3);
00363 }