126 std::set<MdtChamber> to_ret{};
127 std::cout<<
"Read the Mdt geometry tree dump from "<<
inputFile<<std::endl;
130 std::cerr<<__FILE__<<
":"<<__LINE__<<
" Failed to open "<<
inputFile<<std::endl;
135 std::cerr<<__FILE__<<
":"<<__LINE__<<
" The file "<<
inputFile<<
" does not contain the 'MdtGeoModelTree'"<<std::endl;
139 TTreeReaderValue<unsigned short> stationIndex{
treeReader,
"stationIndex"};
142 TTreeReaderValue<short> stationML{
treeReader,
"stationMultiLayer"};
143 TTreeReaderValue<std::string> chamberDesign{
treeReader,
"chamberDesign"};
145 TTreeReaderValue<double> tubeRadius{
treeReader,
"tubeRadius"};
146 TTreeReaderValue<double> tubePitch{
treeReader,
"tubePitch"};
147 TTreeReaderValue<unsigned short> numTubes{
treeReader,
"numTubes"};
150 TTreeReaderValue<std::vector<float>> geoModelTransformX{
treeReader,
"GeoModelTransformX"};
151 TTreeReaderValue<std::vector<float>> geoModelTransformY{
treeReader,
"GeoModelTransformY"};
152 TTreeReaderValue<std::vector<float>> geoModelTransformZ{
treeReader,
"GeoModelTransformZ"};
154 TTreeReaderValue<std::vector<float>> alignableNodeX{
treeReader,
"AlignableNodeX"};
155 TTreeReaderValue<std::vector<float>> alignableNodeY{
treeReader,
"AlignableNodeY"};
156 TTreeReaderValue<std::vector<float>> alignableNodeZ{
treeReader,
"AlignableNodeZ"};
160 TTreeReaderValue<std::vector<unsigned short>> tubeLayer{
treeReader,
"tubeLayer"};
161 TTreeReaderValue<std::vector<unsigned short>> tubeNumber{
treeReader,
"tubeNumber"};
164 TTreeReaderValue<std::vector<double>> activeTubeLength{
treeReader,
"activeTubeLength"};
165 TTreeReaderValue<std::vector<double>> wireLength{
treeReader,
"wireLength"};
167 TTreeReaderValue<std::vector<float>> tubeTransformTransX{
treeReader,
"tubeTransformTranslationX"};
168 TTreeReaderValue<std::vector<float>> tubeTransformTransY{
treeReader,
"tubeTransformTranslationY"};
169 TTreeReaderValue<std::vector<float>> tubeTransformTransZ{
treeReader,
"tubeTransformTranslationZ"};
171 TTreeReaderValue<std::vector<float>> tubeTransformCol0X{
treeReader,
"tubeTransformLinearCol1X"};
172 TTreeReaderValue<std::vector<float>> tubeTransformCol0Y{
treeReader,
"tubeTransformLinearCol1Y"};
173 TTreeReaderValue<std::vector<float>> tubeTransformCol0Z{
treeReader,
"tubeTransformLinearCol1Z"};
175 TTreeReaderValue<std::vector<float>> tubeTransformCol1X{
treeReader,
"tubeTransformLinearCol2X"};
176 TTreeReaderValue<std::vector<float>> tubeTransformCol1Y{
treeReader,
"tubeTransformLinearCol2Y"};
177 TTreeReaderValue<std::vector<float>> tubeTransformCol1Z{
treeReader,
"tubeTransformLinearCol2Z"};
179 TTreeReaderValue<std::vector<float>> tubeTransformCol2X{
treeReader,
"tubeTransformLinearCol3X"};
180 TTreeReaderValue<std::vector<float>> tubeTransformCol2Y{
treeReader,
"tubeTransformLinearCol3Y"};
181 TTreeReaderValue<std::vector<float>> tubeTransformCol2Z{
treeReader,
"tubeTransformLinearCol3Z"};
183 TTreeReaderValue<std::vector<float>> readOutPosX{
treeReader,
"readOutPosX"};
184 TTreeReaderValue<std::vector<float>> readOutPosY{
treeReader,
"readOutPosY"};
185 TTreeReaderValue<std::vector<float>> readOutPosZ{
treeReader,
"readOutPosZ"};
191 newchamber.id.eta = (*stationEta);
192 newchamber.id.phi = (*stationPhi);
193 newchamber.id.multilayer = (*stationML);
194 newchamber.design = (*chamberDesign);
196 newchamber.tubeRadius = (*tubeRadius);
197 newchamber.tubePitch = (*tubePitch);
199 newchamber.numTubes = (*numTubes);
200 newchamber.numLayers = (*numLayers);
203 geoRot.col(0) =
Amg::Vector3D((*geoModelTransformX)[1], (*geoModelTransformY)[1], (*geoModelTransformZ)[1]);
204 geoRot.col(1) =
Amg::Vector3D((*geoModelTransformX)[2], (*geoModelTransformY)[2], (*geoModelTransformZ)[2]);
205 geoRot.col(2) =
Amg::Vector3D((*geoModelTransformX)[3], (*geoModelTransformY)[3], (*geoModelTransformZ)[3]);
206 Amg::Vector3D geoTrans{(*geoModelTransformX)[0], (*geoModelTransformY)[0], (*geoModelTransformZ)[0]};
209 geoRot.col(0) =
Amg::Vector3D((*alignableNodeX)[1], (*alignableNodeY)[1], (*alignableNodeZ)[1]);
210 geoRot.col(1) =
Amg::Vector3D((*alignableNodeX)[2], (*alignableNodeY)[2], (*alignableNodeZ)[2]);
211 geoRot.col(2) =
Amg::Vector3D((*alignableNodeX)[3], (*alignableNodeY)[3], (*alignableNodeZ)[3]);
212 geoTrans =
Amg::Vector3D{(*alignableNodeX)[0], (*alignableNodeY)[0], (*alignableNodeZ)[0]};
217 for (
size_t t = 0;
t < tubeLayer->size(); ++
t){
219 TubePositioning newTube{};
221 newTube.tubeNum = (*tubeNumber)[
t];
222 newTube.tubeLength = (*tubeLength)[
t];
223 newTube.wireLength = (*wireLength)[
t];
225 tubeRot.col(0) =
Amg::Vector3D((*tubeTransformCol0X)[
t],(*tubeTransformCol0Y)[
t], (*tubeTransformCol0Z)[
t]);
226 tubeRot.col(1) =
Amg::Vector3D((*tubeTransformCol1X)[
t],(*tubeTransformCol1Y)[
t], (*tubeTransformCol1Z)[
t]);
227 tubeRot.col(2) =
Amg::Vector3D((*tubeTransformCol2X)[
t],(*tubeTransformCol2Y)[
t], (*tubeTransformCol2Z)[
t]);
228 Amg::Vector3D tubeTrans{(*tubeTransformTransX)[
t],(*tubeTransformTransY)[
t], (*tubeTransformTransZ)[
t]};
230 newTube.readoutPos =
Amg::Vector3D{(*readOutPosX)[
t],(*readOutPosY)[
t],(*readOutPosZ)[
t]};
231 newchamber.insertTube(std::move(newTube));
234 auto insert_itr = to_ret.insert(std::move(newchamber));
235 if (!insert_itr.second) {
236 std::stringstream
err{};
237 err<<__FILE__<<
":"<<__LINE__<<
" The chamber "<<(*insert_itr.first).
id
238 <<
" has already been inserted. "<<std::endl;
239 throw std::runtime_error(
err.str());
242 std::cout<<
"File parsing is finished. Found in total "<<to_ret.size()<<
" readout element dumps "<<std::endl;