00001 #include "emcPatch.h"
00002 #include "emcNodeHelper.h"
00003 #include "PHCompositeNode.h"
00004 #include <iostream>
00005 #include <cmath>
00006 #include "emcTowerContainer.h"
00007 #include "emcTowerContent.h"
00008 #include "dEmcCalibTowerWrapper.h"
00009 #include "emcRawDataAccessor.h"
00010 #include "emcRawDataObject.h"
00011 #include "emcCalibratedDataObject.h"
00012 #include "EmcIndexer.h"
00013 #include <cassert>
00014
00015 using namespace std;
00016
00017
00018 emcPatch::emcPatch()
00019 {
00020 name = "emcPatch";
00021 }
00022
00023
00024 emcPatch::~emcPatch()
00025 {
00026
00027 }
00028
00029
00030 PHBoolean
00031 emcPatch::event(PHCompositeNode* topNode)
00032 {
00033 emcNodeHelper nh;
00034
00035 PHCompositeNode* emc2 = nh.findCompositeNode(topNode,"EMC2");
00036
00037 if ( !emc2 )
00038 {
00039 cerr << "emcPatch::event : did not find EMC2 node !"
00040 << endl;
00041 return false;
00042 }
00043
00044 dEmcCalibTowerWrapper* calibTower =
00045 nh.getTable<dEmcCalibTowerWrapper>("dEmcCalibTower",topNode);
00046 assert(calibTower!=0);
00047
00048 emcTowerContainer* tc =
00049 nh.getObject<emcTowerContainer>("emcTowerContainer",topNode);
00050 if (!tc)
00051 {
00052 cerr << "<E> Could not find emcTowerContainer node"
00053 << endl;
00054 topNode->print();
00055 return false;
00056 }
00057
00058 tc->Reset();
00059
00060 emcRawDataAccessor* rda = emcRawDataAccessor::GetInstance();
00061 assert(rda!=0);
00062 emcRawDataObject* rdo = rda->GetRawDataObject();
00063 assert(rdo!=0);
00064
00065 int out=0;
00066
00067 for ( size_t i = 0; i < calibTower->RowCount(); ++i )
00068 {
00069 int softkey = calibTower->get_swkey(i);
00070 int towerID = EmcIndexer::TowerID(softkey);
00071 int index = rdo->GetIndexByTowerId(towerID);
00072 assert(index>=0);
00073 int amutac,amupre,amupost;
00074 float tac,hgpost,lgpost,hgpre,lgpre;
00075 int derr;
00076 rdo->Get(index,tac,hgpost,lgpost,hgpre,lgpre,amupre,amupost,amutac,derr);
00077 emcTowerContent* tower = tc->addTower(out);
00078 ++out;
00079 int fem,channel;
00080 EmcIndexer::PXPXSM144CH(towerID,fem,channel);
00081 tower->SetID(fem,channel);
00082 tower->SetRaw((int)hgpost,(int)hgpre,
00083 (int)lgpost,(int)lgpre,
00084 (int)tac,
00085 amupre,amupost,amutac);
00086 tower->SetDataError(rdo->GetDataError(index));
00087 tower->SetADCTDC(static_cast<int>(rint(calibTower->get_adc(i))),
00088 static_cast<int>(rint(calibTower->get_tac(i))));
00089 tower->SetCalibrated(calibTower->get_ecal(i),
00090 calibTower->get_tof(i));
00091 tower->SetNeighbours(calibTower->get_deadmap(i),
00092 calibTower->get_warnmap(i));
00093 }
00094
00095
00096 return true;
00097 }