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
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
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
00175 setup_calibrator(topNode);
00176
00177
00178 mEmcTOFCorr5 = mEmcTOFCorr5Module::instance();
00179 mEmcTOFCorr5->readDataFromDB(fRunNumber);
00180
00181 fModules->add(mEmcTOFCorr5);
00182
00183
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
00202
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
00229
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