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
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
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
00143 setup_calibrator(topNode);
00144
00145
00146 mEmcTOFCorr5 = mEmcTOFCorr5Module::instance();
00147 mEmcTOFCorr5->readDataFromDB(fRunNumber);
00148
00149 fModules->add(mEmcTOFCorr5);
00150
00151
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
00167
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
00193
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