00001 #include "GainBaseLinePlayer.h"
00002
00003 #include <cassert>
00004 #include "emcCalibrationDataHelper.h"
00005 #include "Fun4AllServer.h"
00006 #include "RunHeader.h"
00007 #include "emcClusterContainer.h"
00008 #include "emcClusterContent.h"
00009 #include <algorithm>
00010 #include <cctype>
00011 #include <iostream>
00012 #include <map>
00013 #include "EmcIndexer.h"
00014
00015
00016 GainBaseLinePlayer::GainBaseLinePlayer(const char* runningmode)
00017 : fCH(0)
00018 {
00019 ThisName = "GainBaseLinePlayer";
00020 fRunningMode = runningmode;
00021 std::transform(fRunningMode.begin(),fRunningMode.end(),
00022 fRunningMode.begin(), ::toupper);
00023 assert(fRunningMode=="UNDO" ||
00024 fRunningMode=="TRIM30");
00025 }
00026
00027
00028 GainBaseLinePlayer::~GainBaseLinePlayer()
00029 {
00030 delete fCH;
00031 }
00032
00033
00034 int
00035 GainBaseLinePlayer::End(PHCompositeNode*)
00036 {
00037 return 0;
00038 }
00039
00040
00041 int
00042 GainBaseLinePlayer::EndRun(PHCompositeNode*)
00043 {
00044 return 0;
00045 }
00046
00047
00048 int
00049 GainBaseLinePlayer::Init(PHCompositeNode*)
00050 {
00051 return 0;
00052 }
00053
00054
00055 int
00056 GainBaseLinePlayer::InitRun(PHCompositeNode* topNode)
00057 {
00058 assert(fCH==0);
00059
00060 Fun4AllServer* se = Fun4AllServer::instance();
00061
00062 RunHeader* rh = se->getClass<RunHeader>(topNode,"RunHeader");
00063 assert(rh!=0);
00064 int runnumber = rh->get_RunNumber();
00065
00066 fCH = new emcCalibrationDataHelper(runnumber,false,
00067 emcManageable::kDB_Objy,
00068 "pbsc");
00069
00070
00071
00072
00073
00074 const float BL[] = { 147.85,
00075 155.23,
00076 142.10,
00077 127.58,
00078 131.15,
00079 129.74
00080 };
00081
00082 std::map<int,float> mcorr;
00083
00084 for ( size_t is = 0; is < 6; ++is )
00085 {
00086 float corr = 1.0;
00087 if ( fRunningMode == "UNDO" )
00088 {
00089 corr = BL[is]/fCH->getGainBaseLine(is,"value");
00090 }
00091 else if ( fRunningMode == "TRIM30" )
00092 {
00093 corr =
00094 fCH->getGainBaseLine(is,"value","30:xmax:-3:-9:-15")/
00095 fCH->getGainBaseLine(is,"value");
00096 }
00097
00098 mcorr[is] = corr;
00099 }
00100
00101 std::cout << "<I> GainBaseLinePlayer::InitRun : Running in "
00102 << fRunningMode << " mode. "
00103 << std::endl
00104 << "Multiplicative correction factors for PbSc energies = "
00105 << std::endl;
00106
00107 std::map<int,float>::const_iterator it;
00108 for ( it = mcorr.begin(); it != mcorr.end(); ++it )
00109 {
00110 std::cout << EmcIndexer::EmcSectorId(it->first)
00111 << " "
00112 << it->second
00113 << std::endl;
00114 }
00115
00116 for ( size_t itower = 0; itower < 108*144; ++itower )
00117 {
00118 int is,iy,iz;
00119 EmcIndexer::decodeTowerId(itower,is,iy,iz);
00120 fCorrectionFactor.push_back(mcorr[is]);
00121 }
00122
00123 assert(fCorrectionFactor.size()==108*144);
00124 return 0;
00125 }
00126
00127
00128 int
00129 GainBaseLinePlayer::process_event(PHCompositeNode* topNode)
00130 {
00131 Fun4AllServer* se = Fun4AllServer::instance();
00132
00133 emcClusterContainer* cont =
00134 se->getClass<emcClusterContainer>(topNode,"emcClusterContainer");
00135 assert(cont!=0);
00136
00137 for ( size_t i = 0; i < cont->size(); ++i )
00138 {
00139 emcClusterContent* c = cont->getCluster(i);
00140 assert(c!=0);
00141 if ( c->type() == 1 )
00142 {
00143 int towerid = c->towerid(0);
00144 c->set_e(c->e()*fCorrectionFactor[towerid]);
00145 c->set_e9(c->e9()*fCorrectionFactor[towerid]);
00146 c->set_ecore(c->ecore()*fCorrectionFactor[towerid]);
00147 c->set_ecent(c->ecent()*fCorrectionFactor[towerid]);
00148 c->set_etofmin(c->etofmin()*fCorrectionFactor[towerid]);
00149 c->set_etofmax(c->etofmax()*fCorrectionFactor[towerid]);
00150 }
00151 }
00152
00153 return 0;
00154 }
00155
00156
00157 int
00158 GainBaseLinePlayer::Reset(PHCompositeNode*)
00159 {
00160 return 0;
00161 }
00162
00163
00164 int
00165 GainBaseLinePlayer::ResetEvent(PHCompositeNode*)
00166 {
00167 return 0;
00168 }
00169
00170
00171 void
00172 GainBaseLinePlayer::Print(const char* what) const
00173 {
00174
00175 }
00176