00001 #include "mEmcRecoModuleSimulationYear2.h"
00002 #include "PHCompositeNode.h"
00003 #include "emcNodeHelper.h"
00004
00005
00006 #include "dEmcRawDataWrapper.h"
00007 #include "dEmcFEMDataWrapper.h"
00008 #include "dEmcDCMDataWrapper.h"
00009 #include "dEmcGeaTrackTowerWrapper.h"
00010 #include "dEmcGeaTrackWrapper.h"
00011 #include "dEmcGeaTowerTrackWrapper.h"
00012 #include "dEmcGeaClusterTrackWrapper.h"
00013 #include "dEmcGeaTrackClusterWrapper.h"
00014 #include "dEmcGeaParamsWrapper.h"
00015 #include "dEmcGeaHitWrapper.h"
00016 #include "dEmcRespParWrapper.h"
00017 #include "dEmcGeometryWrapper.h"
00018 #include "dEmcEventWrapper.h"
00019 #include "dEmcClusterLocalExtWrapper.h"
00020 #include "dEmcClusterLocalWrapper.h"
00021 #include "dEmcCalibTowerWrapper.h"
00022 #include "emcparWrapper.h"
00023
00024
00025 #include "mEmcDefGeomModule.h"
00026 #include "mEmcGeaParamsModule.h"
00027 #include "mEmcGeaMakeRawModule.h"
00028 #include "mEmcGeaTrackModule.h"
00029 #include "mEmcDCMToRawModule.h"
00030 #include "mEmcGeaEventModule.h"
00031 #include "mEmcCalibTowerModule.h"
00032 #include "mEmcGeaClusterEvalModule.h"
00033 #include "mEmcRawToFEMModule.h"
00034 #include "mEmcFEMToDCMModule.h"
00035 #include "mEmcGeometryModule.h"
00036 #include "mEmcClusterNewModule.h"
00037 #include "mEmcGetDCMModule.h"
00038 #include "mEmcPutDCMLongModule.h"
00039 #include "mEmcRawToLongModulev1.h"
00040 #include "mEmcPRDFToRawModule.h"
00041 #include "mEmcToolsModule.h"
00042
00043
00044
00045 #include "PHFlag.h"
00046
00047 #include <cassert>
00048 #include <cstdlib>
00049 #include <iostream>
00050 #include <memory>
00051
00052 using namespace std;
00053
00054
00055 const float mEmcRecoModuleSimulationYear2::fgPbScTowerThreshold = 0.010;
00056 const float mEmcRecoModuleSimulationYear2::fgPbGlTowerThreshold = 0.014;
00057
00058 const float mEmcRecoModuleSimulationYear2::fgPbScMinClusterEnergy = 0.015;
00059 const float mEmcRecoModuleSimulationYear2::fgPbGlMinClusterEnergy = 0.060;
00060
00061
00062 mEmcRecoModuleSimulationYear2::mEmcRecoModuleSimulationYear2
00063 (const PHFlag& flags)
00064 {
00065 if ( flags.get_IntFlag("EVALUATIONFLAG") )
00066 {
00067 fEvaluation = true;
00068 }
00069 else
00070 {
00071 fEvaluation = false;
00072 }
00073
00074 fSimulationFlag = flags.get_IntFlag("SIMULATIONFLAG");
00075
00076 assert(fSimulationFlag>0 && fSimulationFlag<=3);
00077
00078 if ( fSimulationFlag == 3 && fEvaluation )
00079 {
00080 cerr << "mEmcRecoModuleSimulationYear2::ctor : "
00081 << "<INFO> Cannot do evaluation in PISA to PRDF mode. (you set"
00082 << " EVALUATIONFLAG to 1 and asked for SIMULATIONFLAG=3, which has"
00083 << " no sense). Thus I will *not* try to do EMCAL evaluation."
00084 << endl;
00085 fEvaluation=false;
00086 }
00087
00088 if ( flags.get_IntFlag("PPFLAG") )
00089 {
00090 fPP = true;
00091 }
00092 else
00093 {
00094 fPP = false;
00095 }
00096
00097
00098 fTimeStamp = rc->get_TimeStamp();
00099
00100 PHTimeStamp y1999(1999,1,1,0,0,0);
00101
00102 assert( fTimeStamp > y1999 );
00103 }
00104
00105
00106 int
00107 mEmcRecoModuleSimulationYear2::ana(PHCompositeNode* topNode)
00108 {
00109 return fModules.event(topNode);
00110 }
00111
00112
00113 int
00114 mEmcRecoModuleSimulationYear2::end(PHCompositeNode* topNode)
00115 {
00116 return 0;
00117 }
00118
00119
00120 int
00121 mEmcRecoModuleSimulationYear2::setup(PHCompositeNode* topNode)
00122 {
00123
00124
00125 emcNodeHelper nodeHelper;
00126
00127 if ( !nodeHelper.makeDSTnodes(topNode) )
00128 {
00129 cerr << __FILE__ << ":" << __LINE__
00130 << " Something went wrong while making EMC related nodes."
00131 << endl;
00132 return -1;
00133 }
00134
00135
00136
00137 PHCompositeNode* emcNode = emcNodeHelper::findCompositeNode(topNode,"EMC");
00138 PHCompositeNode* dcmNode = emcNodeHelper::findCompositeNode(topNode,"DCM");
00139 PHCompositeNode* evaNode = emcNodeHelper::findCompositeNode(topNode,"EVA");
00140 PHCompositeNode* parNode = emcNodeHelper::findCompositeNode(topNode,"PAR");
00141 PHCompositeNode* geaNode = emcNodeHelper::findCompositeNode(topNode,"GEA");
00142 PHCompositeNode* dstNode = emcNodeHelper::findCompositeNode(topNode,"DST");
00143
00144 assert(emcNode!=0);
00145 assert(dcmNode!=0);
00146 assert(evaNode!=0);
00147 assert(parNode!=0);
00148 assert(dstNode!=0);
00149
00150
00151 emcNodeHelper::addTable<dEmcRawDataWrapper>(emcNode,"dEmcRawData",25000);
00152
00153 emcNodeHelper::addTable<dEmcFEMDataWrapper>(emcNode,"dEmcFEMData",500);
00154
00155
00156 emcNodeHelper::addTable<dEmcDCMDataWrapper>(dcmNode,"dEmcDCMData",500);
00157
00158
00159 emcNodeHelper::addTable<dEmcGeaTrackTowerWrapper>
00160 (evaNode,"dEmcGeaTrackTower",15000);
00161
00162 emcNodeHelper::addTable<dEmcGeaTowerTrackWrapper>
00163 (evaNode,"dEmcGeaTowerTrack",15000);
00164
00165 emcNodeHelper::addTable<dEmcGeaTrackWrapper>(evaNode,"dEmcGeaTrack",7500);
00166
00167
00168 emcNodeHelper::addTable<dEmcGeaParamsWrapper>(parNode,"dEmcGeaParams",8);
00169
00170 dEmcRespParWrapper* dEmcRespPar =
00171 emcNodeHelper::addTable<dEmcRespParWrapper>(parNode,"dEmcRespPar",1);
00172 setupResponse(dEmcRespPar);
00173
00174
00175 emcNodeHelper::addTable<dEmcGeometryWrapper>(parNode,"dEmcGeometry",30000);
00176
00177 emcNodeHelper::addTable<emcparWrapper>(parNode,"emcpar",8);
00178
00179
00180 bool transient = true;
00181 emcNodeHelper::addTable<dEmcGeaHitWrapper>
00182 (geaNode,"dEmcGeaHit",525000,transient);
00183
00184
00185
00186 emcNodeHelper::addTable<dEmcClusterLocalWrapper>
00187 (emcNode,"dEmcClusterLocal",30000);
00188 emcNodeHelper::addTable<dEmcEventWrapper>(emcNode,"dEmcEvent",1);
00189
00190
00191
00192 emcNodeHelper::addTable<dEmcCalibTowerWrapper>
00193 (dstNode,"dEmcCalibTower",25000);
00194 emcNodeHelper::addTable<dEmcClusterLocalExtWrapper>
00195 (dstNode,"dEmcClusterLocalExt",25000);
00196
00197
00198
00199 if ( fEvaluation )
00200 {
00201 setupEvaluation(topNode);
00202 }
00203
00204
00205
00206 setupBadModules(topNode);
00207
00208
00209
00210 setupAna(topNode);
00211
00212 topNode->print();
00213
00214 return 0;
00215 }
00216
00217
00218 void
00219 mEmcRecoModuleSimulationYear2::setupAna(PHCompositeNode* topNode)
00220 {
00221 if ( fSimulationFlag == 1 )
00222 {
00223
00224 fModules.add(new mEmcPRDFToRawModule);
00225 fModules.add(new mEmcDefGeomModule);
00226 fModules.add(new mEmcGeaEventModule);
00227 fModules.add(new mEmcCalibTowerModule);
00228 mEmcToolsModule* tools = mEmcToolsModule::instance();
00229 fModules.add(tools);
00230 fModules.add(setupClustering(topNode));
00231 }
00232 else if ( fSimulationFlag == 2 )
00233 {
00234
00235 fModules.add(new mEmcGeaParamsModule,emcModuleHelper::kFirstEventOnly);
00236 fModules.add(new mEmcGeaEventModule);
00237 fModules.add(new mEmcGeaMakeRawModule);
00238 fModules.add(new mEmcGeaTrackModule);
00239
00240
00241
00242
00243
00244
00245
00246
00247 fModules.add(new mEmcCalibTowerModule);
00248 fModules.add(new mEmcApplyQAToSimu);
00249 fModules.add(setupClustering(topNode));
00250 }
00251 else if ( fSimulationFlag == 3 )
00252 {
00253
00254 fModules.add(new mEmcGeaParamsModule,emcModuleHelper::kFirstEventOnly);
00255 fModules.add(new mEmcGeaMakeRawModule);
00256 fModules.add(new mEmcGeaTrackModule);
00257 fModules.add(new mEmcRawToLongModulev1);
00258 fModules.add(new mEmcPutDCMLongModule);
00259 }
00260
00261 if ( fEvaluation )
00262 {
00263 fModules.add(new mEmcGeaClusterEvalModule);
00264 }
00265
00266 cout << "mEmcRecoModuleSimulationYear2::setupAna : module list : "
00267 << endl;
00268
00269 fModules.print();
00270 }
00271
00272
00273 EMCModule*
00274 mEmcRecoModuleSimulationYear2::setupClustering(PHCompositeNode* topNode)
00275 {
00276
00277
00278
00279 PHCompositeNode* parNode =
00280 emcNodeHelper::findCompositeNode(topNode,"PAR");
00281 mEmcGeometryModule* mEmcGeometry =
00282 emcNodeHelper::addObject<mEmcGeometryModule>(parNode,"mEmcGeometry");
00283
00284 mEmcClusterNewModule* mc =
00285 new mEmcClusterNewModule(mEmcGeometry);
00286
00287
00288 mc->SetTowerThresholdPbSc(fgPbScTowerThreshold);
00289 mc->SetTowerThresholdPbGl(fgPbGlTowerThreshold);
00290 mc->SetMinClusterEnergyPbSc(fgPbScMinClusterEnergy);
00291 mc->SetMinClusterEnergyPbGl(fgPbGlMinClusterEnergy);
00292
00293 return mc;
00294 }
00295
00296
00297 void
00298 mEmcRecoModuleSimulationYear2::setupEvaluation(PHCompositeNode* topNode)
00299 {
00300 PHCompositeNode* evaNode = emcNodeHelper::findCompositeNode(topNode,"EVA");
00301 assert(evaNode!=0);
00302
00303 emcNodeHelper::addTable<dEmcGeaTrackClusterWrapper>
00304 (evaNode,"dEmcGeaTrackCluster",7500);
00305 emcNodeHelper::addTable<dEmcGeaClusterTrackWrapper>
00306 (evaNode,"dEmcGeaClusterTrack",7500);
00307 }
00308
00309
00310 void
00311 mEmcRecoModuleSimulationYear2::setupResponse(dEmcRespParWrapper* respPar)
00312 {
00313 respPar->SetRowCount(1);
00314 respPar->set_anyset(0,1);
00315 respPar->set_sim_timing(0,0);
00316 respPar->set_pbgl_response(0,3);
00317 }