/data3/calcul/jacquem/working_dir/Micromegas/micromegasFrameWork/src/parser/Hardroc2Reader.cpp

Go to the documentation of this file.
00001 /* @version $Revision: 1328 $ * @modifiedby $Author: jacquem $ * @lastmodified $Date: 2011-10-03 17:04:17 +0200 (Mon, 03 Oct 2011) $ */
00002 
00003 ////////////////////////////////////////////////////////////////////////
00004 // MICROMEGAS
00005 //
00006 //       EVENT RECONSTRUCTION SOFTWARE FOR HARDROC BOARDS
00007 //
00008 ////////////////////////////////////////////////////////////////////////
00009 // v7 8.6.2009
00010 //    29.6.2009 : added timestamps with Hardroc data
00011 ////////////////////////////////////////////////////////////////////////
00012 // timestamp (v7) :
00013 //   t(hit) = t(lecture) - t2 + t3
00014 //   l(lecture) = t0 + (t1 - t10)
00015 //   avec
00016 //     t0 = timestamp unix (32 bits, avec ou sans millisecondes)
00017 //     t1 = BcId absolu (bcId_Abs, 48 bits)
00018 //     t10 = premiere lecture de t1
00019 //     t2 = BcId pour la DIF (bcId_HRHit, 24 bits)
00020 //     t3 = BCId pour la HR (bcId_Hit, 24 bits en CODE GRAY)
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 //--------------- Destructeur -------------//
00054 Hardroc2Reader::~Hardroc2Reader()
00055 {
00056   FILE_LOG(logDEBUG1)<< "----Hardroc2Reader destructor"<< endl;
00057 }
00058 
00059 //-------------------------------------------------------------------
00060 void Hardroc2Reader::reset() {
00061   bcId_AbsOrg = -1; // the bcId origin in milliseconds
00062   CRC = 0; // current CRC for the whole file
00063   SkippedBcId = 0;
00064 
00065   // following initializations are useless
00066   globalTime = 0;
00067   difId = -1;
00068   difTriggerCounter = acqTriggerCounter = globalTriggerCounter = 0;
00069   bcPeriod = 200;
00070   bcId_Abs = bcId_Dif = bcId_Hit = 0;
00071 } // Hardroc2Reader.reset
00072 
00073 
00074 //-------------------------------------------------------------------
00075 int Hardroc2Reader::newHit(Event& event, const Detector &detector, int data, const int chNum, const int chipId, const int difId) {
00076   // cannot be binary pattern 10
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       // look for type of chamber
00084 //      if (chamber.getType() != HARDROC1CHAMBER)
00085 //        continue;
00086       // store new event data
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   } // for
00109   FILE_LOG(logERROR) << "      ch " << chNum << ", chip " << chipId << ", dif " << difId << " : geometry element not found" << endl;
00110   return(0);
00111 } // Hardroc2Reader.newHit

Generated on Mon Jan 7 13:15:22 2013 for MicromegasFramework by  doxygen 1.4.7