00001 #include "mEmcRecoModuleSimulationYear1.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
00023 #include "emcparWrapper.h"
00024
00025
00026 #include "mEmcDefGeomModule.h"
00027 #include "mEmcGeaParamsModule.h"
00028 #include "mEmcGeaMakeRawModule.h"
00029 #include "mEmcGeaTrackModule.h"
00030 #include "mEmcDCMToRawModule.h"
00031 #include "mEmcGeaEventModule.h"
00032 #include "mEmcCalibTowerModule.h"
00033 #include "mEmcGeaClusterEvalModule.h"
00034 #include "mEmcRawToFEMModule.h"
00035 #include "mEmcFEMToDCMModule.h"
00036 #include "mEmcGeometryModule.h"
00037 #include "mEmcClusterNewModule.h"
00038 #include "mEmcGetDCMModule.h"
00039 #include "mEmcPutDCMModule.h"
00040
00041 #include "PHFlag.h"
00042
00043 #include <cassert>
00044 #include <cstdlib>
00045
00046 using namespace std;
00047
00048
00049 const float mEmcRecoModuleSimulationYear1::fgPbScTowerThreshold = 0.003;
00050 const float mEmcRecoModuleSimulationYear1::fgPbGlTowerThreshold = 0.014;
00051
00052 const float mEmcRecoModuleSimulationYear1::fgPbScMinClusterEnergy = 0.015;
00053 const float mEmcRecoModuleSimulationYear1::fgPbGlMinClusterEnergy = 0.060;
00054
00055
00056 mEmcRecoModuleSimulationYear1::mEmcRecoModuleSimulationYear1
00057 (const PHFlag& flags)
00058 {
00059 if ( flags.get_IntFlag("EVALUATIONFLAG") )
00060 {
00061 fEvaluation = true;
00062 }
00063 else
00064 {
00065 fEvaluation = false;
00066 }
00067
00068 fSimulationFlag = flags.get_IntFlag("SIMULATIONFLAG");
00069
00070 assert(fSimulationFlag>0 && fSimulationFlag<=3);
00071 }
00072
00073
00074 void
00075 mEmcRecoModuleSimulationYear1::setupAna(PHCompositeNode* topNode)
00076 {
00077 if ( fSimulationFlag == 1 )
00078 {
00079
00080 fModules.add(new mEmcGetDCMModule);
00081 fModules.add(new mEmcDCMToRawModule);
00082 fModules.add(new mEmcDefGeomModule);
00083 fModules.add(new mEmcGeaEventModule);
00084 fModules.add(new mEmcGeaTrackModule);
00085 fModules.add(new mEmcCalibTowerModule);
00086 fModules.add(setupClustering(topNode));
00087 }
00088 else if ( fSimulationFlag == 2 )
00089 {
00090
00091 fModules.add(new mEmcGeaParamsModule,emcModuleHelper::kFirstEventOnly);
00092 fModules.add(new mEmcGeaMakeRawModule);
00093 fModules.add(new mEmcGeaTrackModule);
00094 fModules.add(new mEmcCalibTowerModule);
00095 fModules.add(setupClustering(topNode));
00096 }
00097 else if ( fSimulationFlag == 3 )
00098 {
00099
00100 fModules.add(new mEmcGeaParamsModule,emcModuleHelper::kFirstEventOnly);
00101 fModules.add(new mEmcGeaEventModule);
00102 fModules.add(new mEmcGeaMakeRawModule);
00103 fModules.add(new mEmcGeaTrackModule);
00104 fModules.add(new mEmcRawToFEMModule);
00105 fModules.add(new mEmcFEMToDCMModule);
00106 fModules.add(new mEmcPutDCMModule);
00107 }
00108
00109 if ( fEvaluation )
00110 {
00111 fModules.add(new mEmcGeaClusterEvalModule);
00112 }
00113
00114 cout << "mEmcRecoModuleSimulationYear1::setupAna : module list : "
00115 << endl;
00116
00117 fModules.print();
00118 }
00119
00120
00121 int
00122 mEmcRecoModuleSimulationYear1::ana(PHCompositeNode* topNode)
00123 {
00124 return fModules.event(topNode);
00125 }
00126
00127
00128 int
00129 mEmcRecoModuleSimulationYear1::end(PHCompositeNode* topNode)
00130 {
00131 return 0;
00132 }
00133
00134
00135 int
00136 mEmcRecoModuleSimulationYear1::setup(PHCompositeNode* topNode)
00137 {
00138
00139
00140 emcNodeHelper nodeHelper;
00141
00142 if ( !nodeHelper.makeDSTnodes(topNode) )
00143 {
00144 cerr << __FILE__ << ":" << __LINE__
00145 << " Something went wrong while making EMC related nodes."
00146 << endl;
00147 return -1;
00148 }
00149
00150
00151
00152 PHCompositeNode* emcNode = emcNodeHelper::findCompositeNode(topNode,"EMC");
00153 PHCompositeNode* dcmNode = emcNodeHelper::findCompositeNode(topNode,"DCM");
00154 PHCompositeNode* evaNode = emcNodeHelper::findCompositeNode(topNode,"EVA");
00155 PHCompositeNode* parNode = emcNodeHelper::findCompositeNode(topNode,"PAR");
00156 PHCompositeNode* geaNode = emcNodeHelper::findCompositeNode(topNode,"GEA");
00157 PHCompositeNode* dstNode = emcNodeHelper::findCompositeNode(topNode,"DST");
00158
00159 assert(emcNode!=0);
00160 assert(dcmNode!=0);
00161 assert(evaNode!=0);
00162 assert(parNode!=0);
00163 assert(dstNode!=0);
00164
00165
00166 emcNodeHelper::addTable<dEmcRawDataWrapper>(emcNode,"dEmcRawData",25000);
00167
00168 emcNodeHelper::addTable<dEmcFEMDataWrapper>(emcNode,"dEmcFEMData",500);
00169
00170
00171 emcNodeHelper::addTable<dEmcDCMDataWrapper>(dcmNode,"dEmcDCMData",500);
00172
00173
00174 emcNodeHelper::addTable<dEmcGeaTrackTowerWrapper>
00175 (evaNode,"dEmcGeaTrackTower",15000);
00176
00177 emcNodeHelper::addTable<dEmcGeaTowerTrackWrapper>
00178 (evaNode,"dEmcGeaTowerTrack",15000);
00179
00180 emcNodeHelper::addTable<dEmcGeaTrackWrapper>(evaNode,"dEmcGeaTrack",7500);
00181
00182
00183 emcNodeHelper::addTable<dEmcGeaParamsWrapper>(parNode,"dEmcGeaParams",8);
00184
00185 dEmcRespParWrapper* dEmcRespPar =
00186 emcNodeHelper::addTable<dEmcRespParWrapper>(parNode,"dEmcRespPar",1);
00187 setupResponse(dEmcRespPar);
00188
00189
00190 emcNodeHelper::addTable<dEmcGeometryWrapper>(parNode,"dEmcGeometry",30000);
00191
00192 emcNodeHelper::addTable<emcparWrapper>(parNode,"emcpar",8);
00193
00194
00195 bool transient = true;
00196 emcNodeHelper::addTable<dEmcGeaHitWrapper>
00197 (geaNode,"dEmcGeaHit",525000,transient);
00198
00199
00200
00201 emcNodeHelper::addTable<dEmcClusterLocalWrapper>
00202 (emcNode,"dEmcClusterLocal",30000);
00203 emcNodeHelper::addTable<dEmcEventWrapper>(emcNode,"dEmcEvent",1);
00204
00205
00206
00207 emcNodeHelper::addTable<dEmcCalibTowerWrapper>
00208 (dstNode,"dEmcCalibTower",25000);
00209 emcNodeHelper::addTable<dEmcClusterLocalExtWrapper>
00210 (dstNode,"dEmcClusterLocalExt",25000);
00211
00212
00213
00214 if ( fEvaluation )
00215 {
00216 setupEvaluation(topNode);
00217 }
00218
00219
00220
00221 setupAna(topNode);
00222
00223 topNode->print();
00224
00225 return 0;
00226 }
00227
00228
00229 EMCModule*
00230 mEmcRecoModuleSimulationYear1::setupClustering(PHCompositeNode* topNode)
00231 {
00232
00233
00234
00235 PHCompositeNode* parNode =
00236 emcNodeHelper::findCompositeNode(topNode,"PAR");
00237 mEmcGeometryModule* mEmcGeometry =
00238 emcNodeHelper::addObject<mEmcGeometryModule>(parNode,"mEmcGeometry");
00239
00240 mEmcClusterNewModule* mc =
00241 new mEmcClusterNewModule(mEmcGeometry);
00242
00243
00244 mc->SetTowerThresholdPbSc(fgPbScTowerThreshold);
00245 mc->SetTowerThresholdPbGl(fgPbGlTowerThreshold);
00246 mc->SetMinClusterEnergyPbSc(fgPbScMinClusterEnergy);
00247 mc->SetMinClusterEnergyPbGl(fgPbGlMinClusterEnergy);
00248
00249 return mc;
00250 }
00251
00252
00253 void
00254 mEmcRecoModuleSimulationYear1::setupEvaluation(PHCompositeNode* topNode)
00255 {
00256 PHCompositeNode* evaNode = emcNodeHelper::findCompositeNode(topNode,"EVA");
00257 assert(evaNode!=0);
00258
00259 emcNodeHelper::addTable<dEmcGeaTrackClusterWrapper>
00260 (evaNode,"dEmcGeaTrackCluster",7500);
00261 emcNodeHelper::addTable<dEmcGeaClusterTrackWrapper>
00262 (evaNode,"dEmcGeaClusterTrack",7500);
00263 }
00264
00265
00266 void
00267 mEmcRecoModuleSimulationYear1::setupResponse(dEmcRespParWrapper* respPar)
00268 {
00269 respPar->SetRowCount(1);
00270 respPar->set_anyset(0,1);
00271 respPar->set_sim_timing(0,0);
00272 respPar->set_pbgl_response(0,3);
00273 }