mEmcRecoModuleRealYear3v1.C

Go to the documentation of this file.
00001 #include "mEmcRecoModuleRealYear3v1.h"
00002 #include "emcTowerContainerv3.h"
00003 #include "emcClusterContainerv3.h"
00004 #include "emcClusterContainerv4.h"
00005 #include "emcNodeHelper.h"
00006 #include "mEmcCalibratorModulev1.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 #include "emcDBMS.h"
00015 #include <memory>
00016 #include <iostream>
00017 #include <cassert>
00018 
00019 using namespace std;
00020 
00021 
00022 const float mEmcRecoModuleRealYear3v1::fgTowerThresholdPbSc = 0.010;  
00023 const float mEmcRecoModuleRealYear3v1::fgTowerThresholdPbGl = 0.014;  
00024 const float mEmcRecoModuleRealYear3v1::fgMinClusterEnergyPbSc = 0.015;
00025 const float mEmcRecoModuleRealYear3v1::fgMinClusterEnergyPbGl = 0.060;
00026 
00027 static mEmcTOFCorr5Module* mEmcTOFCorr5 = NULL;
00028 
00029 //_____________________________________________________________________________
00030 mEmcRecoModuleRealYear3v1::mEmcRecoModuleRealYear3v1(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   fStartupMessage << "TimeStamp=" << *fTimeStamp << std::endl;
00049 
00050   fConstantGains = false;
00051   fSectors = "emcal";
00052   fDataSource = emcDBMS::get();
00053 
00054   if ( flags.FlagExist("EMCCONSTANTGAINS") )
00055     {
00056       if ( flags.get_IntFlag("EMCCONSTANTGAINS") == 1 ) 
00057         {
00058           fConstantGains = true;
00059           fStartupMessage 
00060             << "Will not use variability of PbSc gains"
00061             << endl;
00062         }
00063     }
00064 
00065   if ( flags.FlagExist("EMCSECTORS") )
00066     {
00067       fSectors = flags.get_CharFlag("EMCSECTORS");
00068       fStartupMessage 
00069            << "Considering emcal sectors : "
00070            << fSectors
00071            << endl;
00072     }
00073 
00074   if ( flags.FlagExist("EMCDATASOURCE") )
00075     {
00076       emcManageable::EStorage ds = 
00077         emcManageable::GetStorage(flags.get_CharFlag("EMCDATASOURCE"));
00078       if ( ds == emcManageable::kNone )
00079         {
00080           cerr << "mEmcRecoModuleRealYear3v1::mEmcRecoModuleRealYear3v1 : "
00081                << "Flag EMCDATASOURCE=" << flags.get_CharFlag("EMCDATASOURCE")
00082                << " is not valid. Using default=" 
00083                << emcManageable::GetStorageName(fDataSource)
00084                << endl;
00085         }
00086       else
00087         {
00088           fDataSource = ds;
00089         }
00090       fStartupMessage << "Using "
00091                       << emcManageable::GetStorageName(fDataSource)
00092                       << " as calibration data source"
00093                       << endl;          
00094     }
00095       
00096   fModules = new emcModuleHelper;
00097 
00098   fRunNumber = flags.get_IntFlag("RUNNUMBER");
00099 
00100   fDstNodeName = "DST";
00101 }
00102 
00103 //_____________________________________________________________________________
00104 mEmcRecoModuleRealYear3v1::~mEmcRecoModuleRealYear3v1()
00105 {
00106   delete fTimeStamp;
00107   delete fModules;
00108 }
00109 
00110 //_____________________________________________________________________________
00111 int
00112 mEmcRecoModuleRealYear3v1::ana(PHCompositeNode* topNode)
00113 {
00114   return fModules->event(topNode);
00115 }
00116 
00117 //_____________________________________________________________________________
00118 void
00119 mEmcRecoModuleRealYear3v1::createNodeTree(PHCompositeNode* topNode)
00120 {
00121   vector<string> nodes;
00122 
00123   nodes.push_back("EMC");
00124   nodes.push_back("PAR");
00125 
00126   emcNodeHelper nh;
00127 
00128   for ( size_t i = 0; i < nodes.size(); ++i )
00129     {
00130       bool ok = nh.makeCompositeNode(topNode,nodes[i].c_str(),"-p");
00131       assert(ok==true);
00132     }
00133 }
00134 
00135 //_____________________________________________________________________________
00136 int 
00137 mEmcRecoModuleRealYear3v1::end(PHCompositeNode* topNode)
00138 {
00139   return 0;
00140 }
00141 
00142 //_____________________________________________________________________________
00143 void
00144 mEmcRecoModuleRealYear3v1::identify(ostream& os) const
00145 {
00146   os << "mEmcRecoModuleRealYear3v1::identify" << endl;
00147 }
00148 
00149 //_____________________________________________________________________________
00150 int 
00151 mEmcRecoModuleRealYear3v1::setup(PHCompositeNode* topNode)
00152 {
00153   emcNodeHelper nh;
00154 
00155   PHCompositeNode* dstNode = 
00156     nh.findCompositeNode(topNode,fDstNodeName.c_str());
00157 
00158   if (!dstNode) 
00159     {
00160       // Try microDST then.
00161       fDstNodeName = "UDST";
00162       dstNode = nh.findCompositeNode(topNode,fDstNodeName.c_str());
00163       if ( !dstNode ) 
00164         {
00165           cerr << "<E> mEmcRecoModuleRealYear3v1::setup : no DST or "
00166                << " uDST node found !"
00167                << endl;
00168           return -1;
00169         }
00170     }
00171 
00172   createNodeTree(topNode);
00173 
00174   // Calibrator
00175   setup_calibrator(topNode);
00176 
00177   // mEmcTOFCorr5 to apply tower corrections and globalT0
00178   mEmcTOFCorr5 = mEmcTOFCorr5Module::instance();
00179   mEmcTOFCorr5->readDataFromDB(fRunNumber);
00180 
00181   fModules->add(mEmcTOFCorr5);
00182 
00183   // Clustering  
00184   setup_clustering(topNode);
00185         
00186 std::cout << std::string(80,'*') << "\n"
00187             << "EMCAL Reconstruction is using mEmcRecoModuleRealYear3v1\n" 
00188             << fStartupMessage.str() 
00189             << "Sequence of modules used :"
00190             << std::endl;
00191 
00192   fModules->print();
00193 
00194   return 0;
00195 }
00196 
00197 //_____________________________________________________________________________
00198 void
00199 mEmcRecoModuleRealYear3v1::setup_calibrator(PHCompositeNode* topNode)
00200 {
00201   // The data we need first.
00202   // Check on the existence of various nodes has been done elsewhere.
00203 
00204   emcNodeHelper nh;
00205 
00206   PHCompositeNode* dstNode = nh.findCompositeNode(topNode,"DST");
00207   
00208   nh.addObject<emcTowerContainerv3>(dstNode,"emcTowerContainer");
00209 
00210   assert(fTimeStamp!=0);
00211 
00212   mEmcCalibratorModulev1* calib = 
00213     new mEmcCalibratorModulev1(fRunNumber,*fTimeStamp,fConstantGains,
00214                                fDataSource,fSectors.c_str());
00215 
00216   fModules->add(calib);
00217 }
00218 
00219 //_____________________________________________________________________________
00220 void
00221 mEmcRecoModuleRealYear3v1::setup_clustering(PHCompositeNode* topNode)
00222 {
00223   emcNodeHelper nh;
00224 
00225   PHCompositeNode* dstNode = 
00226     nh.findCompositeNode(topNode,fDstNodeName.c_str());
00227 
00228   //  Changed by TKH SM STJL...8-4-2003
00229   //nh.addObject<emcClusterContainerv3>(dstNode,"emcClusterContainer");
00230   nh.addObject<emcClusterContainerv4>(dstNode,"emcClusterContainer");
00231 
00232   PHCompositeNode* parNode = nh.findCompositeNode(topNode,"PAR");
00233 
00234   mEmcGeometryModule* geometryModule = 
00235     new mEmcGeometryModule(mEmcGeometryModule::kReal);
00236   PHIODataNode<TObject>* geometryNode 
00237     = new PHIODataNode<TObject>(geometryModule, "mEmcGeometry");
00238   parNode->addNode(geometryNode);
00239 
00240   mEmcClusterizerv0* clusterizer = new mEmcClusterizerv0(geometryModule);
00241   
00242   clusterizer->SetTowerThresholdPbSc(fgTowerThresholdPbSc);
00243   clusterizer->SetTowerThresholdPbGl(fgTowerThresholdPbGl);
00244   clusterizer->SetMinClusterEnergyPbSc(fgMinClusterEnergyPbSc);
00245   clusterizer->SetMinClusterEnergyPbGl(fgMinClusterEnergyPbGl);
00246 
00247   fModules->add(clusterizer);
00248 }
00249 
00250 
00251 
00252 
00253 
00254