00001
00002
00003
00004
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
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
00051 MicrorocChamber1::~MicrorocChamber1()
00052 {
00053
00054 };
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
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