// $Id$ // // File: DBCAL_EHit_factory.cc // Created: Thu Aug 10 14:47:13 EDT 2006 // Creator: davidl (on Darwin swire-b241.jlab.org 8.7.0 powerpc) // #include #include "DBCAL_EHit_factory.h" #include "DBCAL_ADCHit.h" //------------------ // evnt //------------------ jerror_t DBCAL_EHit_factory::evnt(JEventLoop *loop, int eventnumber) { vector hits; loop->Get(hits); // Initialize local arrays to hold unsparsified hits float E_left[3][6]; float E_right[3][6]; for(int sector=1; sector<=3; sector++){ for(int layer=1; layer<=6; layer++){ E_left[sector-1][layer-1] = 0.0; E_right[sector-1][layer-1] = 0.0; } } // Loop over hits and fill temporary local arrays for(unsigned int i=0; ilayer<1 || hit->layer>6)continue; // paranoid ? if(hit->sector<1 || hit->sector>3)continue; // who's paranoid? if(hit->end==0){ E_right[hit->sector-1][hit->layer-1] = hit->E_attenuated; }else{ E_left[hit->sector-1][hit->layer-1] = hit->E_attenuated; } } // Loop over sector/layers and create DBCAL_EHit objects for // any whose geometric mean is not zero for(int sector=1; sector<=3; sector++){ for(int layer=1; layer<=6; layer++){ float El = E_left[sector-1][layer-1]; float Er = E_right[sector-1][layer-1]; float E = sqrt(El*Er); if(E==0.0)continue; DBCAL_EHit *ehit = new DBCAL_EHit; ehit->layer = layer; ehit->sector = sector; ehit->E_left = El; ehit->E_right = Er; ehit->E = E; _data.push_back(ehit); // put object into "stock" } } return NOERROR; } //------------------ // toString //------------------ const string DBCAL_EHit_factory::toString(void) { // Ensure our Get method has been called so _data is up to date Get(); if(_data.size()<=0)return string(); // don't print anything if we have no data! printheader("row: layer: sector: E_left(MeV): E_right(MeV): E(geom. mean)(MeV):"); for(unsigned int i=0; i<_data.size(); i++){ DBCAL_EHit *hit = _data[i]; printnewrow(); printcol("%d", i); printcol("%d", hit->sector); printcol("%d", hit->layer); printcol("%4.3f", hit->E_left*1000.0); printcol("%4.3f", hit->E_right*1000.0); printcol("%4.3f", hit->E*1000.0); printrow(); } return _table; }