00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <stdio.h>
00024 #include <errno.h>
00025
00026 #include "parser/Hardroc2Reader.hh"
00027 #include "parser/AcquisitionParser.hh"
00028
00029 #include "event/Event.hh"
00030
00031 #include "geometry/Chamber.hh"
00032 #include "geometry/Dif.hh"
00033 #include "geometry/Hardroc2Chip.hh"
00034 #include "geometry/Detector.hh"
00035
00036 #include "tools/Toolbox.hh"
00037 #include "tools/SteerDesc.hh"
00038 #include "tools/Log.hh"
00039 #include "tools/MicroException.hh"
00040
00041 #include <iostream>
00042 #include <iomanip>
00043
00044 using namespace std;
00045
00046
00047 Hardroc2Reader::Hardroc2Reader(Run& aRun, FILE *aFile, ui32 lastEventId) : DifReader(aRun, aFile, lastEventId)
00048 {
00049 FILE_LOG(logDEBUG1) << "--Hardroc2Reader constructor()"<< endl;
00050 reset();
00051 }
00052
00053
00054 Hardroc2Reader::~Hardroc2Reader()
00055 {
00056 FILE_LOG(logDEBUG1)<< "----Hardroc2Reader destructor"<< endl;
00057 }
00058
00059
00060 void Hardroc2Reader::reset() {
00061 bcId_AbsOrg = -1;
00062 CRC = 0;
00063 SkippedBcId = 0;
00064
00065
00066 globalTime = 0;
00067 difId = -1;
00068 difTriggerCounter = acqTriggerCounter = globalTriggerCounter = 0;
00069 bcPeriod = 200;
00070 bcId_Abs = bcId_Dif = bcId_Hit = 0;
00071 }
00072
00073
00074
00075 int Hardroc2Reader::newHit(Event& event, const Detector &detector, int data, const int chNum, const int chipId, const int difId) {
00076
00077
00078 const ChamberMap_t &chambers = detector.getChambers();
00079 for (ChamberMap_t::const_iterator it = chambers.begin(); it != chambers.end(); ++it) {
00080 try {
00081 Chamber& chamber = *(it->second);
00082 const BoardMap_t& boards = chamber.getBoardsByDifId(difId);
00083
00084
00085
00086
00087 try {
00088 const Channel& channel = chamber.getChannelById(chNum, chipId, difId);
00089 i32 analogValue = 0;
00090 ChannelHit *hit = new ChannelHit(channel, data, analogValue);
00091
00092 hit->setHardrocTime(globalTime, bcId_Abs, bcId_Dif, bcId_Hit,0);
00093 event.insertHit(chamber, hit);
00094 FILE_LOG(logDEBUG) << " new Hit : ch " << chNum << ", chip " << chipId << ", dif " << difId
00095 << ", Time=" << globalTime << " abs=" << bcId_Abs << " dif=" << bcId_Dif << " hit=" << bcId_Hit << " Data=" << data << endl;
00096 return(1);
00097 }
00098 catch (MicroException &e) {
00099 FILE_LOG(logERROR) << "ch " << chNum << ", chip " << chipId << ", dif " << difId << " : " << e.getMessage() << endl;
00100 return(0);
00101 }
00102 }
00103 catch (...) {
00104 FILE_LOG(logDEBUG) << " board list not found - try next" << endl;
00105 continue;
00106 }
00107
00108 }
00109 FILE_LOG(logERROR) << " ch " << chNum << ", chip " << chipId << ", dif " << difId << " : geometry element not found" << endl;
00110 return(0);
00111 }