mEmcRecalRecoModuleRealYear3v1.C

Go to the documentation of this file.
00001 #include "mEmcRecalRecoModuleRealYear3v1.h"
00002 #include "emcTowerContainerv3.h"
00003 #include "emcClusterContainerv3.h"
00004 #include "emcClusterContainerv4.h"
00005 #include "emcNodeHelper.h"
00006 #include "mEmcReCalibratorModulev1.h"
00007 #include "PHIODataNode.h"
00008 #include "PHTimeStamp.h"
00009 #include "emcModuleHelper.h"
00010 #include "mEmcGeometryModule.h"
00011 #include "mEmcClusterizerv0.h"
00012 #include "recoConsts.h"
00013 #include <mEmcTOFCorr5Module.h>
00014 
00015 #include <memory>
00016 #include <iostream>
00017 #include <string>
00018 #include <cassert>
00019 
00020 using namespace std;
00021 
00022 static mEmcTOFCorr5Module* mEmcTOFCorr5 = NULL;
00023 const float mEmcRecalRecoModuleRealYear3v1::fgTowerThresholdPbSc = 0.010;
00024 const float mEmcRecalRecoModuleRealYear3v1::fgTowerThresholdPbGl = 0.014;  
00025 const float mEmcRecalRecoModuleRealYear3v1::fgMinClusterEnergyPbSc = 0.015;
00026 const float mEmcRecalRecoModuleRealYear3v1::fgMinClusterEnergyPbGl = 0.060;
00027 
00028 //_____________________________________________________________________________
00029 
00030 mEmcRecalRecoModuleRealYear3v1::mEmcRecalRecoModuleRealYear3v1(const PHFlag& flags)
00031 {
00032   const recoConsts* rc = dynamic_cast<const recoConsts*>(&flags);
00033 
00034   assert(rc!=0);
00035   
00036   if ( flags.FlagExist("SIMULATIONFLAG") )
00037     {
00038       assert(flags.get_IntFlag("SIMULATIONFLAG")==0);
00039     }
00040   
00041   // Insure we use the same time stamp as the one blessed by the framework.
00042   fTimeStamp = new PHTimeStamp(rc->get_TimeStamp());
00043 
00044   PHTimeStamp y1999(1999,1,1,0,0,0);
00045 
00046   assert( *fTimeStamp > y1999 );
00047 
00048   std::cout << "mEmcRecalRecoModuleRealYear3v1::mEmcRecalRecoModuleRealYear3v1 : timestamp="
00049             << *fTimeStamp << std::endl;
00050   
00051   fConstantGains = false;
00052 
00053   if ( flags.FlagExist("EMCCONSTANTGAINS") )
00054     {
00055       if ( flags.get_IntFlag("EMCCONSTANTGAINS") == 1 ) 
00056         {
00057           fConstantGains = true;
00058           std::cout << "mEmcRecalRecoModuleRealYear3v1::mEmcRecalRecoModuleRealYear3v1 : "
00059                << " Will not use variability of PbSc gains"
00060                << std::endl;
00061         }
00062     }
00063 
00064   fModules = new emcModuleHelper;
00065 
00066   fRunNumber = flags.get_IntFlag("RUNNUMBER");
00067 
00068   fDstNodeName = "DST";
00069 }
00070 
00071 //_____________________________________________________________________________
00072 mEmcRecalRecoModuleRealYear3v1::~mEmcRecalRecoModuleRealYear3v1()
00073 {
00074   delete fTimeStamp;
00075   delete fModules;
00076 }
00077 
00078 //_____________________________________________________________________________
00079 int
00080 mEmcRecalRecoModuleRealYear3v1::ana(PHCompositeNode* topNode)
00081 {
00082   return fModules->event(topNode);
00083 }
00084 
00085 //_____________________________________________________________________________
00086 void
00087 mEmcRecalRecoModuleRealYear3v1::createNodeTree(PHCompositeNode* topNode)
00088 {
00089   vector<string> nodes;
00090 
00091   nodes.push_back("EMC");
00092   nodes.push_back("PAR");
00093 
00094   emcNodeHelper nh;
00095 
00096   for ( size_t i = 0; i < nodes.size(); ++i )
00097     {
00098       bool ok = nh.makeCompositeNode(topNode,nodes[i].c_str(),"-p");
00099       assert(ok==true);
00100     }
00101 }
00102 
00103 //_____________________________________________________________________________
00104 int 
00105 mEmcRecalRecoModuleRealYear3v1::end(PHCompositeNode* topNode)
00106 {
00107   return 0;
00108 }
00109 
00110 //_____________________________________________________________________________
00111 void
00112 mEmcRecalRecoModuleRealYear3v1::identify(ostream& os) const
00113 {
00114   os << "mEmcRecalRecoModuleRealYear3v1::identify" << endl;
00115 }
00116 
00117 //_____________________________________________________________________________
00118 int 
00119 mEmcRecalRecoModuleRealYear3v1::setup(PHCompositeNode* topNode)
00120 {
00121   emcNodeHelper nh;
00122 
00123   PHCompositeNode* dstNode = 
00124     nh.findCompositeNode(topNode,fDstNodeName.c_str());
00125 
00126   if (!dstNode) 
00127     {
00128       // Try microDST then.
00129       fDstNodeName = "UDST";
00130       dstNode = nh.findCompositeNode(topNode,fDstNodeName.c_str());
00131       if ( !dstNode ) 
00132         {
00133           cerr << "<E> mEmcRecalRecoModuleRealYear3v1::setup : no DST or "
00134                << " uDST node found !"
00135                << endl;
00136           return -1;
00137         }
00138     }
00139 
00140   createNodeTree(topNode);
00141 
00142   // Calibrator
00143   setup_calibrator(topNode);
00144 
00145   // mEmcTOFCorr5 to apply tower corrections and globalT0
00146   mEmcTOFCorr5 = mEmcTOFCorr5Module::instance();
00147   mEmcTOFCorr5->readDataFromDB(fRunNumber);
00148 
00149   fModules->add(mEmcTOFCorr5);
00150 
00151   // Clustering  
00152   setup_clustering(topNode);
00153         
00154   std::cout << "mEmcRecalRecoModuleRealYear3v1::setup : list of modules = "
00155             << std::endl;
00156 
00157   fModules->print();
00158 
00159   return 0;
00160 }
00161 
00162 //_____________________________________________________________________________
00163 void
00164 mEmcRecalRecoModuleRealYear3v1::setup_calibrator(PHCompositeNode* topNode)
00165 {
00166   // The data we need first.
00167   // Check on the existence of various nodes has been done elsewhere.
00168 
00169   emcNodeHelper nh;
00170 
00171   PHCompositeNode* dstNode = nh.findCompositeNode(topNode,"DST");
00172   
00173   nh.addObject<emcTowerContainerv3>(dstNode,"emcTowerContainer");
00174 
00175   assert(fTimeStamp!=0);
00176 
00177   mEmcReCalibratorModulev1* calib = 
00178     new mEmcReCalibratorModulev1(fRunNumber,*fTimeStamp,fConstantGains);
00179 
00180   fModules->add(calib);
00181 }
00182 
00183 //_____________________________________________________________________________
00184 void
00185 mEmcRecalRecoModuleRealYear3v1::setup_clustering(PHCompositeNode* topNode)
00186 {
00187   emcNodeHelper nh;
00188 
00189   PHCompositeNode* dstNode = 
00190     nh.findCompositeNode(topNode,fDstNodeName.c_str());
00191 
00192   //  Changed by TKH SM STJL...8-4-2003
00193   //nh.addObject<emcClusterContainerv3>(dstNode,"emcClusterContainer");
00194   nh.addObject<emcClusterContainerv4>(dstNode,"emcClusterContainer");
00195 
00196   PHCompositeNode* parNode = nh.findCompositeNode(topNode,"PAR");
00197 
00198   mEmcGeometryModule* geometryModule = 
00199     new mEmcGeometryModule(mEmcGeometryModule::kReal);
00200   PHIODataNode<TObject>* geometryNode 
00201     = new PHIODataNode<TObject>(geometryModule, "mEmcGeometry");
00202   parNode->addNode(geometryNode);
00203 
00204   mEmcClusterizerv0* clusterizer = new mEmcClusterizerv0(geometryModule);
00205   
00206   clusterizer->SetTowerThresholdPbSc(fgTowerThresholdPbSc);
00207   clusterizer->SetTowerThresholdPbGl(fgTowerThresholdPbGl);
00208   clusterizer->SetMinClusterEnergyPbSc(fgMinClusterEnergyPbSc);
00209   clusterizer->SetMinClusterEnergyPbGl(fgMinClusterEnergyPbGl);
00210 
00211   fModules->add(clusterizer);
00212 }
00213 
00214 
00215 
00216 
00217 
00218