GainBaseLinePlayer.C

Go to the documentation of this file.
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   // BaseLines at end of Run3. Obtained with trim.C to be found in
00071   // cvs:offline/packages/emc-calib/Calib
00072   // details="0:xmax:-3:-9:-15
00073 
00074   const float BL[] = { 147.85, // W0 w/o FEM 3,9,15
00075                        155.23, // W1
00076                        142.10, // W2
00077                        127.58, // W3
00078                        131.15, // E2
00079                        129.74  // E3
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