mEmcRecoModuleRealYear4.C

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