emcPatch.C

Go to the documentation of this file.
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 }