mEmcRecoModuleSimulationYear2.C

Go to the documentation of this file.
00001 #include "mEmcRecoModuleSimulationYear2.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 #include "emcparWrapper.h"
00023 
00024 // Modules
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; // 10 MeV  
00056 const float mEmcRecoModuleSimulationYear2::fgPbGlTowerThreshold = 0.014; // 14 MeV  
00057                                                               
00058 const float mEmcRecoModuleSimulationYear2::fgPbScMinClusterEnergy = 0.015; // 15 MeV
00059 const float mEmcRecoModuleSimulationYear2::fgPbGlMinClusterEnergy = 0.060; // 60 MeV
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   // Insure we use the same time stamp as the one blessed by the framework
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   //---- First thing is to check that we do have all our nodes there.
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   //---- Then make our tables/objects
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   // Raw PISA Data
00151   emcNodeHelper::addTable<dEmcRawDataWrapper>(emcNode,"dEmcRawData",25000);
00152   // Simulated FEM Data
00153   emcNodeHelper::addTable<dEmcFEMDataWrapper>(emcNode,"dEmcFEMData",500);
00154 
00155   // Simulated DCM Data
00156   emcNodeHelper::addTable<dEmcDCMDataWrapper>(dcmNode,"dEmcDCMData",500);
00157 
00158   // Geant Track Tower
00159   emcNodeHelper::addTable<dEmcGeaTrackTowerWrapper>
00160     (evaNode,"dEmcGeaTrackTower",15000);
00161   // Geant Tower Track
00162   emcNodeHelper::addTable<dEmcGeaTowerTrackWrapper>
00163     (evaNode,"dEmcGeaTowerTrack",15000);
00164   // Geant Track
00165   emcNodeHelper::addTable<dEmcGeaTrackWrapper>(evaNode,"dEmcGeaTrack",7500);
00166 
00167   // Geant Parameters
00168   emcNodeHelper::addTable<dEmcGeaParamsWrapper>(parNode,"dEmcGeaParams",8);
00169   // Response parameters
00170   dEmcRespParWrapper* dEmcRespPar = 
00171     emcNodeHelper::addTable<dEmcRespParWrapper>(parNode,"dEmcRespPar",1);
00172   setupResponse(dEmcRespPar);
00173 
00174   // Geometry
00175   emcNodeHelper::addTable<dEmcGeometryWrapper>(parNode,"dEmcGeometry",30000);
00176   // Emc Parameters
00177   emcNodeHelper::addTable<emcparWrapper>(parNode,"emcpar",8);
00178 
00179   // Geant Hits
00180   bool transient = true;
00181   emcNodeHelper::addTable<dEmcGeaHitWrapper>
00182     (geaNode,"dEmcGeaHit",525000,transient);
00183 
00184   // EMC objects needed by clustering module
00185 
00186   emcNodeHelper::addTable<dEmcClusterLocalWrapper>
00187     (emcNode,"dEmcClusterLocal",30000);
00188   emcNodeHelper::addTable<dEmcEventWrapper>(emcNode,"dEmcEvent",1);
00189 
00190   // Output tables/objects
00191 
00192   emcNodeHelper::addTable<dEmcCalibTowerWrapper>
00193     (dstNode,"dEmcCalibTower",25000);
00194   emcNodeHelper::addTable<dEmcClusterLocalExtWrapper>
00195     (dstNode,"dEmcClusterLocalExt",25000);
00196 
00197   // Don't forget evaluation if requested...
00198 
00199   if ( fEvaluation ) 
00200     {
00201       setupEvaluation(topNode);
00202     }
00203 
00204   // Collect Q&A information to be applied to simulated data
00205 
00206   setupBadModules(topNode);
00207 
00208   // Then go to setup the modules needed.
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       // PRDF to DST
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       // PISA to DST
00235       fModules.add(new mEmcGeaParamsModule,emcModuleHelper::kFirstEventOnly); 
00236       fModules.add(new mEmcGeaEventModule);
00237       fModules.add(new mEmcGeaMakeRawModule);
00238       fModules.add(new mEmcGeaTrackModule);
00239 
00240       // LVL2 Simulations requires this
00241       // Level 2 needs DCM tables to be filled
00242       // fModules.add(new mEmcRawToLongModule);
00243       // fModules.add(new mEmcPutDCMLongModule("dEmcRawDataReCal","dEmcDCMLongDataReCal"));
00244       // fModules.add(new EmcSimuRawDataRecal);
00245       // fModules.add(new mEmcPutDCMLongReCalModule);
00246 
00247       fModules.add(new mEmcCalibTowerModule);
00248       fModules.add(new mEmcApplyQAToSimu);
00249       fModules.add(setupClustering(topNode));
00250     }
00251   else if ( fSimulationFlag == 3 ) 
00252     {
00253       // PISA to PRDF
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   // CGL need mEmcGeometry module to be in PAR node
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   // Setup clustering module.
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);  // reset to LED timing  May 23, 2001
00316   respPar->set_pbgl_response(0,3);
00317 }