60 {
61 ATH_MSG_DEBUG(
"will get global alignment for station "<<stationID);
62 nlohmann::json channeldata=jsondata["data"];
63
64
65 SiGlobAlignData GA_guess(stationID);
67 int guess_ch_correct=0;
68 for(auto guess_ch : guess_ch_vec)
69 {
70 nlohmann::json aligndata=channeldata.at(std::to_string(guess_ch));
71 int st=aligndata[
"stationID"];
72 std::string alignType=aligndata["alignType"];
73 if(stationID==st)
74 {
75 if(alignType=="tracker" && !(guess_ch_correct&1))
76 {
77 ATH_MSG_DEBUG(
"channel guessed correctly, stationID "<<st<<
", alignType "<<alignType<<
", channel guess "<<guess_ch);
78 GA_guess.setTracker(aligndata["shiftX"], aligndata["shiftY"], aligndata["shiftZ"], aligndata["alpha"], aligndata["beta"], aligndata["gamma"]);
79 guess_ch_correct+=1;
80 }
81 else if(alignType=="beam" && !(guess_ch_correct&2))
82 {
83 ATH_MSG_DEBUG(
"channel guessed correctly, stationID "<<st<<
", alignType "<<alignType<<
", channel guess "<<guess_ch);
84 GA_guess.setBeam(aligndata["shiftX"], aligndata["shiftY"], aligndata["shiftZ"], aligndata["alpha"], aligndata["beta"], aligndata["gamma"]);
85 guess_ch_correct+=2;
86 }
87 else if(alignType=="RP" && !(guess_ch_correct&4))
88 {
89 ATH_MSG_DEBUG(
"channel guessed correctly, stationID "<<st<<
", alignType "<<alignType<<
", channel guess "<<guess_ch);
90 GA_guess.setRP(aligndata["shiftX"], aligndata["shiftY"], aligndata["shiftZ"], aligndata["alpha"], aligndata["beta"], aligndata["gamma"]);
91 guess_ch_correct+=4;
92 }
93 else if(alignType=="correction" && !(guess_ch_correct&8))
94 {
95 ATH_MSG_DEBUG(
"channel guessed correctly, stationID "<<st<<
", alignType "<<alignType<<
", channel guess "<<guess_ch);
96 GA_guess.setCorr(aligndata["shiftX"], aligndata["shiftY"], aligndata["shiftZ"], aligndata["alpha"], aligndata["beta"], aligndata["gamma"]);
97 guess_ch_correct+=8;
98 }
99 else ATH_MSG_DEBUG(
"alignType or channel is probably incorrect, stationID "<<stationID<<
", alignType "<<alignType<<
", channel guess "<<guess_ch<<
", guess_ch_correct "<<guess_ch_correct);
100 }
101 }
102
103 if(guess_ch_correct==15)
104 {
105 ATH_MSG_DEBUG(
"channels guessed correctly, stationID "<<stationID);
106 return GA_guess;
107 }
108 else
109 {
110 ATH_MSG_DEBUG(
"channels were not guessed correctly, stationID "<<stationID);
111 }
112
113
114 SiGlobAlignData GA_loop(stationID);
115 int loop_ch_correct=0;
116 for(auto& chan : channeldata.items())
117 {
118
119 nlohmann::json aligndata=
chan.value();
120
121 int st=aligndata[
"stationID"];
122 std::string alignType=aligndata["alignType"];
123
124 if(stationID==st)
125 {
126 if(alignType=="tracker" && !(loop_ch_correct&1))
127 {
128 ATH_MSG_DEBUG(
"channel found for stationID "<<st<<
", alignType "<<alignType<<
", channel nr. "<<
chan.key());
129 GA_loop.setTracker(aligndata["shiftX"], aligndata["shiftY"], aligndata["shiftZ"], aligndata["alpha"], aligndata["beta"], aligndata["gamma"]);
130 loop_ch_correct+=1;
131 }
132 else if(alignType=="beam" && !(loop_ch_correct&2))
133 {
134 ATH_MSG_DEBUG(
"channel found for stationID "<<st<<
", alignType "<<alignType<<
", channel nr. "<<
chan.key());
135 GA_loop.setBeam(aligndata["shiftX"], aligndata["shiftY"], aligndata["shiftZ"], aligndata["alpha"], aligndata["beta"], aligndata["gamma"]);
136 loop_ch_correct+=2;
137 }
138 else if(alignType=="RP" && !(loop_ch_correct&4))
139 {
140 ATH_MSG_DEBUG(
"channel found for stationID "<<st<<
", alignType "<<alignType<<
", channel nr. "<<
chan.key());
141 GA_loop.setRP(aligndata["shiftX"], aligndata["shiftY"], aligndata["shiftZ"], aligndata["alpha"], aligndata["beta"], aligndata["gamma"]);
142 loop_ch_correct+=4;
143 }
144 else if(alignType=="correction" && !(loop_ch_correct&8))
145 {
146 ATH_MSG_DEBUG(
"channel found for stationID "<<st<<
", alignType "<<alignType<<
", channel nr. "<<
chan.key());
147 GA_loop.setCorr(aligndata["shiftX"], aligndata["shiftY"], aligndata["shiftZ"], aligndata["alpha"], aligndata["beta"], aligndata["gamma"]);
148 loop_ch_correct+=8;
149 }
150 else ATH_MSG_DEBUG(
"alignType is probably incorrect, stationID "<<stationID<<
", alignType "<<alignType<<
", channel nr. "<<
chan.key()<<
", loop_ch_correct "<<loop_ch_correct);
151 }
152
153 if(loop_ch_correct==15)
154 {
155 ATH_MSG_DEBUG(
"channels found correctly, stationID "<<stationID);
156 return GA_loop;
157 }
158 else
159 {
160 ATH_MSG_DEBUG(
"channels were not found correctly, stationID "<<stationID);
161 }
162 }
163
164 ATH_MSG_WARNING(
"global alignment data stationID "<<stationID<<
" not found in any channels, returning zeros");
165 return SiGlobAlignData(stationID);
166 }
#define ATH_MSG_WARNING(x)
constexpr uint8_t stationID
Large or Small wedge.