mEmcRecoModuleSimulationYear1.C

Go to the documentation of this file.
00001 #include "mEmcRecoModuleSimulationYear1.h"
00002 #include "PHCompositeNode.h"
00003 #include "emcNodeHelper.h"
00004 
00005 // Table wrappers
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 // Modules
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; // 3 MeV   
00050 const float mEmcRecoModuleSimulationYear1::fgPbGlTowerThreshold = 0.014; // 14 MeV  
00051                                                               
00052 const float mEmcRecoModuleSimulationYear1::fgPbScMinClusterEnergy = 0.015; // 15 MeV
00053 const float mEmcRecoModuleSimulationYear1::fgPbGlMinClusterEnergy = 0.060; // 60 MeV
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       // PRDF to DST
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       // PISA to DST
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       // PISA to PRDF
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   //---- First thing is to check that we do have all our nodes there.
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   //---- Then make our tables/objects
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   // Raw PISA Data
00166   emcNodeHelper::addTable<dEmcRawDataWrapper>(emcNode,"dEmcRawData",25000);
00167   // Simulated FEM Data
00168   emcNodeHelper::addTable<dEmcFEMDataWrapper>(emcNode,"dEmcFEMData",500);
00169 
00170   // Simulated DCM Data
00171   emcNodeHelper::addTable<dEmcDCMDataWrapper>(dcmNode,"dEmcDCMData",500);
00172 
00173   // Geant Track Tower
00174   emcNodeHelper::addTable<dEmcGeaTrackTowerWrapper>
00175     (evaNode,"dEmcGeaTrackTower",15000);
00176   // Geant Tower Track
00177   emcNodeHelper::addTable<dEmcGeaTowerTrackWrapper>
00178     (evaNode,"dEmcGeaTowerTrack",15000);
00179   // Geant Track
00180   emcNodeHelper::addTable<dEmcGeaTrackWrapper>(evaNode,"dEmcGeaTrack",7500);
00181 
00182   // Geant Parameters
00183   emcNodeHelper::addTable<dEmcGeaParamsWrapper>(parNode,"dEmcGeaParams",8);
00184   // Response parameters
00185   dEmcRespParWrapper* dEmcRespPar = 
00186     emcNodeHelper::addTable<dEmcRespParWrapper>(parNode,"dEmcRespPar",1);
00187   setupResponse(dEmcRespPar);
00188 
00189   // Geometry
00190   emcNodeHelper::addTable<dEmcGeometryWrapper>(parNode,"dEmcGeometry",30000);
00191   // Emc Parameters
00192   emcNodeHelper::addTable<emcparWrapper>(parNode,"emcpar",8);
00193 
00194   // Geant Hits
00195   bool transient = true;
00196   emcNodeHelper::addTable<dEmcGeaHitWrapper>
00197     (geaNode,"dEmcGeaHit",525000,transient);
00198 
00199   // EMC objects needed by clustering module
00200 
00201   emcNodeHelper::addTable<dEmcClusterLocalWrapper>
00202     (emcNode,"dEmcClusterLocal",30000);
00203   emcNodeHelper::addTable<dEmcEventWrapper>(emcNode,"dEmcEvent",1);
00204 
00205   // Output tables/objects
00206 
00207   emcNodeHelper::addTable<dEmcCalibTowerWrapper>
00208     (dstNode,"dEmcCalibTower",25000);
00209   emcNodeHelper::addTable<dEmcClusterLocalExtWrapper>
00210     (dstNode,"dEmcClusterLocalExt",25000);
00211 
00212   // Don't forget evaluation if requested...
00213 
00214   if ( fEvaluation ) 
00215     {
00216       setupEvaluation(topNode);
00217     }
00218 
00219   // Then go to setup the modules needed.
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   // CGL need mEmcGeometry module to be in PAR node
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   // Setup clustering module.
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);  // reset to LED timing  May 23, 2001
00272   respPar->set_pbgl_response(0,3);
00273 }