00001 #include "emcDataProcessorv2.h"
00002
00003 #include "emcFEMList.h"
00004 #include "emcPacketProcessorv1.h"
00005 #include "emcRawDataProcessorv2.h"
00006 #include "emcCalibrationDataHelper.h"
00007 #include "emcDCProcessorv2.h"
00008
00009 #include "packet.h"
00010 #include "Event.h"
00011 #include "EmcIndexer.h"
00012 #include <cassert>
00013 #include "emcTowerContainer.h"
00014
00015 ClassImp(emcDataProcessorv2)
00016
00017
00018 emcDataProcessorv2::emcDataProcessorv2()
00019 {
00020 fPacketProcessor = getPacketProcessor();
00021 fRawDataProcessor = 0;
00022 fDCProcessor = 0;
00023 fCalibrationDataHelper = 0;
00024 fRunNumber = 0;
00025 fTimeStamp = 0;
00026 }
00027
00028
00029 emcDataProcessorv2::emcDataProcessorv2(int runnumber,
00030 const PHTimeStamp& ts,
00031 bool initall,
00032 emcManageable::EStorage dataSource,
00033 const char* sectors)
00034 {
00035 fPacketProcessor = getPacketProcessor();
00036 fRawDataProcessor = 0;
00037 fDCProcessor = 0;
00038 fRunNumber = runnumber;
00039 fTimeStamp = new PHTimeStamp(ts);
00040 fCalibrationDataHelper = new emcCalibrationDataHelper
00041 (fRunNumber,*fTimeStamp,initall, dataSource,sectors);
00042 emcFEMList f(sectors);
00043
00044 for ( int i = 0; i < 172; ++i )
00045 {
00046 if ( f.hasFEM(i) )
00047 {
00048 fFemList.insert(i);
00049 }
00050 }
00051 }
00052
00053
00054 emcDataProcessorv2::~emcDataProcessorv2()
00055 {
00056 delete fPacketProcessor;
00057 delete fRawDataProcessor;
00058 delete fDCProcessor;
00059 delete fCalibrationDataHelper;
00060 delete fTimeStamp;
00061 }
00062
00063
00064 bool
00065 emcDataProcessorv2::calibrate(emcTowerContainer* pbsc,
00066 emcTowerContainer* pbgl,
00067 time_t incrementalTime)
00068 {
00069 if ( !fDCProcessor )
00070 {
00071 if ( fRunNumber > 0 )
00072 {
00073 if ( !fCalibrationDataHelper )
00074 {
00075 if ( fTimeStamp )
00076 {
00077
00078 fCalibrationDataHelper =
00079 new emcCalibrationDataHelper(fRunNumber,*fTimeStamp,true);
00080 }
00081 else
00082 {
00083
00084
00085
00086
00087 fCalibrationDataHelper =
00088 new emcCalibrationDataHelper(fRunNumber,true);
00089 }
00090 }
00091
00092 fDCProcessor = getDCProcessor(fCalibrationDataHelper);
00093 }
00094 else
00095 {
00096 std::cerr << "<E> emcDataProcessorv2::calibrate : runnumber ("
00097 << fRunNumber << " is invalid !" << std::endl;
00098 return false;
00099 }
00100 }
00101
00102 return fDCProcessor->calibrate(pbsc,pbgl,incrementalTime);
00103 }
00104
00105
00106
00107
00108 bool
00109 emcDataProcessorv2::decode(const Event& event,
00110 emcTowerContainer* pbsc,
00111 emcTowerContainer* pbgl)
00112 {
00113
00114
00115
00116 Event& ncevent = const_cast<Event&>(event);
00117
00118 if ( fRunNumber <= 0 )
00119 {
00120 setRunNumber(ncevent.getRunNumber());
00121 assert(fRunNumber>0);
00122 }
00123
00124 if (pbsc)
00125 {
00126 pbsc->Reset();
00127 }
00128
00129 if (pbgl)
00130 {
00131 pbgl->Reset();
00132 }
00133
00134
00135 std::set<int>::const_iterator it;
00136
00137 for ( it = fFemList.begin(); it != fFemList.end(); ++it )
00138 {
00139 int ifem = *it;
00140
00141 int packetID = 8001+ifem;
00142
00143 Packet* packet = ncevent.getPacket(packetID);
00144
00145 if ( packet )
00146 {
00147 if ( pbsc && EmcIndexer::isPbScFEM(ifem) )
00148 {
00149 bool ok = fPacketProcessor->process(*packet,*pbsc);
00150 if (!ok)
00151 {
00152 std::cerr << "Could not process packet " << packetID
00153 << " in event "
00154 << std::endl;
00155 ncevent.identify(std::cerr);
00156 }
00157 }
00158 else if ( pbgl && EmcIndexer::isPbGlFEM(ifem ) )
00159 {
00160 bool ok = fPacketProcessor->process(*packet,*pbgl);
00161 if (!ok)
00162 {
00163 std::cerr << "Could not process packet " << packetID
00164 << " in event "
00165 << std::endl;
00166 ncevent.identify(std::cerr);
00167 }
00168 }
00169 }
00170 delete packet;
00171 }
00172
00173 return true;
00174 }
00175
00176
00177 emcDCProcessor*
00178 emcDataProcessorv2::getDCProcessor(emcCalibrationDataHelper* cdh) const
00179 {
00180 return new emcDCProcessorv2(cdh);
00181 }
00182
00183
00184 emcCalibrationDataHelper*
00185 emcDataProcessorv2::getCalibrationDataHelper() const
00186 {
00187 return fCalibrationDataHelper;
00188 }
00189
00190
00191 emcPacketProcessor*
00192 emcDataProcessorv2::getPacketProcessor() const
00193 {
00194 return new emcPacketProcessorv1;
00195 }
00196
00197
00198 emcRawDataProcessor*
00199 emcDataProcessorv2::getRawDataProcessor(emcCalibrationDataHelper* cdh) const
00200 {
00201 return new emcRawDataProcessorv2(cdh);
00202 }
00203
00204
00205 void
00206 emcDataProcessorv2::identify(std::ostream& os) const
00207 {
00208 os << "emcDataProcessorv2::identify" << std::endl;
00209 }
00210
00211
00212 int
00213 emcDataProcessorv2::isValid() const
00214 {
00215 return 1;
00216 }
00217
00218
00219 void
00220 emcDataProcessorv2::Reset()
00221 {
00222 }
00223
00224
00225 bool
00226 emcDataProcessorv2::toADCandTDC(emcTowerContainer* pbsc,
00227 emcTowerContainer* pbgl,
00228 const emcBadModules& bad)
00229 {
00230 if ( !fRawDataProcessor )
00231 {
00232 if ( fRunNumber > 0 )
00233 {
00234 if ( !fCalibrationDataHelper )
00235 {
00236 if ( fTimeStamp )
00237 {
00238 fCalibrationDataHelper =
00239 new emcCalibrationDataHelper(fRunNumber,*fTimeStamp,true);
00240 }
00241 else
00242 {
00243 fCalibrationDataHelper =
00244 new emcCalibrationDataHelper(fRunNumber,true);
00245 }
00246 }
00247
00248 fRawDataProcessor = getRawDataProcessor(fCalibrationDataHelper);
00249 }
00250 else
00251 {
00252 std::cerr << "<E> emcDataProcessorv2::toADCandTDC : runnumber ("
00253 << fRunNumber << " is invalid !" << std::endl;
00254 return false;
00255 }
00256 }
00257
00258 return fRawDataProcessor->toADCandTDC(pbsc,pbgl,bad);
00259 }
00260