/data3/calcul/jacquem/working_dir/Micromegas/micromegasFrameWork/src/geometry/MicrorocChamber1.cpp

Go to the documentation of this file.
00001 /* @version $Revision: 1393 $ * @modifiedby $Author: jacquem $ * @lastmodified $Date: 2011-12-16 00:10:36 +0100 (Fri, 16 Dec 2011) $ */
00002 
00003 
00004 // 1 board * 6 x 4 chips * 8 x 8 channels
00005 
00006 
00007 #include "geometry/MicrorocChamber1.hh"
00008 #include "geometry/MicrorocBoard.hh"
00009 #include "geometry/MicrorocChip.hh"
00010 #include "geometry/Dif.hh"
00011 
00012 #include "tools/Log.hh"
00013 
00014 #include <iostream>
00015 using namespace std;
00016 
00017 //--------------- Constructor -------------//
00018 MicrorocChamber1::MicrorocChamber1(const float aX, const float aY, const float aZ,const bool   xRotation,const bool yRotation, const i16 zRotation, const i32 id,
00019                                  const std::vector<DifInfo_t>& difInfos,
00020                                  const std::vector<BoardInfo_t>& boardInfos,
00021                                  const std::vector<ChipInfo_t>& chipInfos)
00022 : Chamber(aX, aY , aZ ,  xRotation,yRotation,zRotation, 1, 1 , id)
00023 {
00024   FILE_LOG(logDEBUG1) << "---MicrorocChamber1 constructor id " << id << endl;
00025 
00026    if (   difInfos.size() != 1 |
00027      boardInfos.size() != 1 |
00028      chipInfos.size()  != 24)
00029    {
00030        FILE_LOG(logERROR)<< endl << "XML geometry error for chamber id[" << id << "] :MicrorocChamber1 must be composed of:\n"
00031             "-[1] dif." << endl <<
00032             "-[1] board." << endl <<
00033             "-[24] chips." << endl << endl <<
00034             "-> And in  your XML file:" << endl <<
00035             "[" <<  difInfos.size() << "]   dif" << endl <<
00036             "[" <<  boardInfos.size() << "] board" << endl <<
00037             "[" <<  chipInfos.size() << "]  chips" << endl;
00038        myIsValid = false;
00039    }
00040 
00041    else {
00042     description = "MicrorocChamber1";
00043     type = MICROROCCHAMBER1;
00044     init(id, difInfos,  boardInfos,  chipInfos);
00045     myIsValid = true;
00046    }
00047 }
00048 
00049 
00050 //--------------- Destructor -------------//
00051 MicrorocChamber1::~MicrorocChamber1()
00052 {
00053   //FILE_LOG(logDEBUG) << "---MicrorocChamber1 destructor"<< endl;
00054 }; // ~MicrorocChamber1
00055 
00056 
00057 /*
00058 //-------------------------------------------//
00059 const ui32  MicrorocChamber1::getXLength() const
00060 {
00061   const Board& board = *(boards.begin()->second);
00062   return this->nbColumns * ( board.getXLength() + this->getXGap() );
00063 }
00064 
00065 //-------------------------------------------//
00066 const ui32  MicrorocChamber1::getYLength() const
00067 {
00068   const Board& board = *(boards.begin()->second);
00069   return this->nbRows * ( board.getYLength() + this->getYGap() );
00070 }
00071  */
00072 
00073 //------------------------------------------//
00074 void MicrorocChamber1::init(i32 id, const std::vector<DifInfo_t>&   difInfos,
00075                                    const std::vector<BoardInfo_t>& boardInfos,
00076                                    const std::vector<ChipInfo_t>&  chipInfos)
00077 {
00078   int bcol = 0;
00079   int brow = 0;
00080 
00081 
00082    const DifInfo_t& difInfo =  difInfos.at(0);
00083    if (difInfo.chamberId != this->getId())
00084    {
00085       FILE_LOG(logERROR)<< "      Detector.build : chamber id " <<  this->getId() << ", dif.chamber.Id " << difInfo.chamberId << endl;
00086       exit(-1);
00087    }
00088    Dif *dif = new Dif(difInfo.id);
00089 
00090      const BoardInfo_t& boardInfo = boardInfos.at(0);
00091      if (boardInfo.difId != dif->getId() || boardInfo.chamberId != this->getId())
00092      {
00093        FILE_LOG(logERROR)<< "      Detector.build : dif id " << dif->getId() << ", boardInfo.difId.Id " << boardInfo.difId << endl;
00094        exit(-1);
00095      }
00096 
00097      bcol= 0 ;
00098      MicrorocBoard *board = new MicrorocBoard(*this,bcol , brow , 6, 4, boardInfo.id);
00099 
00100      this->addDif(dif);
00101      dif->addBoard(board);
00102      this->addBoard(board);
00103 
00104 
00105 
00106      int ccol = 0;
00107      int crow = 0;
00108      for (int chipNum = 0; chipNum < chipInfos.size(); chipNum++)
00109      {
00110          const ChipInfo_t& chipInfo = chipInfos.at(chipNum);
00111          if ((chipInfo.boardId != boardInfo.id)
00112               || (chipInfo.difId != difInfo.id)
00113               || (chipInfo.chamberId != id))
00114          {
00115            continue;
00116          }
00117          FILE_LOG(logDEBUG1)<< "      Detector.build : chip " << chipInfo.id << ", board " << chipInfo.boardId << endl;
00118          ccol=  chipNum%6 ;
00119 
00120 
00121          FILE_LOG(logDEBUG)<< "      Detector.build : chip serial number[" << chipInfo.serial<< "] " << endl;
00122          MicrorocChip *chip = new MicrorocChip(*board, ccol, crow, chipInfo.id,chipInfo.serial);
00123          board->addChip(chip);
00124 
00125          if (ccol == 5) { ++crow; }
00126      }
00127      FILE_LOG(logDEBUG1)<< "  Detector.build : dif " << difInfo.id << ", chamber " << difInfo.chamberId << *this << endl;
00128      if ( bcol >= 1) { brow++ ; }
00129 }
00130 

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