103 double tension[] = { 15, 15, 15, 16, 16, 17, 17, 18, 14, 14, 19, 19, 24, 24, 31,
104 31, 37, 37, 45, 45, 46, 47, 47, 47, 47, 48, 48, 48, 48, 49,
105 49, 49, 49, 50, 50, 50, 51, 51, 51, 52, 52, 52, 52 };
110 if ( !initAlign() ) {
return false; }
114 ifstream fin( m_fwconf.c_str() );
115 if ( !fin.is_open() )
117 cout <<
"ERROR: can not open file " << m_fwconf << endl;
121 for ( ilay = 0; ilay <
LAYERNMAX; ilay++ )
123 fin >> strtmp >> radius >> ncell >> twist >> offset >> length >> first;
128 if ( fabs( twist ) > 0.1 ) { offset = 0.0; }
130 aglstart = (
PI / ncell ) * first + ( offset *
PI / 180.0 );
131 if ( aglstart < -0.000001 ) { aglstart += 2.0 *
PI / ncell; }
133 if ( twist < -0.1 ) { layertype = 1; }
134 else if ( twist > 0.1 ) { layertype = 2; }
135 else { layertype = 0; }
137 slant = atan(
sin(
PI * twist / ncell ) * radius * 2.0 / length );
141 m_player[ilay]->setNcell( ncell );
142 m_player[ilay]->setLayerRad( radius );
143 m_player[ilay]->setLength( length );
144 m_player[ilay]->setTwistCell( twist );
145 m_player[ilay]->setSlant( slant );
147 if ( ilay <
INNERNMAX ) m_player[ilay]->setFgInner(
true );
148 else m_player[ilay]->setFgInner(
false );
151 if ( ilay < 8 ) { iEle = 0; }
152 else if ( ilay < 10 ) { iEle = 1; }
153 else if ( ilay < 12 ) { iEle = 2; }
154 else if ( ilay < 14 ) { iEle = 3; }
155 else if ( ilay < 16 ) { iEle = 4; }
156 else if ( ilay < 18 ) { iEle = 5; }
157 else if ( ilay < 20 ) { iEle = 6; }
160 iPar[0] = iEle + m_iTXf;
161 iPar[1] = iEle + m_iTXb;
162 iPar[2] = iEle + m_iTYf;
163 iPar[3] = iEle + m_iTYb;
164 iPar[4] = iEle + m_iTZf;
165 iPar[5] = iEle + m_iTZb;
166 iPar[6] = iEle + m_iRXf;
167 iPar[7] = iEle + m_iRXb;
168 iPar[8] = iEle + m_iRYf;
169 iPar[9] = iEle + m_iRYb;
170 iPar[10] = iEle + m_iRZf;
171 iPar[11] = iEle + m_iRZb;
173 m_player[ilay]->setAlignParId( iPar );
175 for ( icell = 0; icell < ncell; icell++ )
177 m_wiretable[ilay][icell] = iwire;
178 angleforwini = (double)icell * 2.0 *
PI / ncell + aglstart;
181 angleforw = angleforwini + m_alignPar[iEle + m_iRZf];
184 xf = radius *
cos( angleforw );
185 yf = radius *
sin( angleforw );
188 xf += m_alignPar[iEle + m_iTXf];
189 yf += m_alignPar[iEle + m_iTYf];
190 zf += m_alignPar[iEle + m_iTZf];
193 angleback = angleforwini + twist * 2.0 *
PI / ncell;
194 angleback += m_alignPar[iEle + m_iRZb];
197 xb = radius *
cos( angleback );
198 yb = radius *
sin( angleback );
201 xb += m_alignPar[iEle + m_iTXb];
202 yb += m_alignPar[iEle + m_iTYb];
203 zb += m_alignPar[iEle + m_iTZb];
206 channel = icell - 8 * ampid;
207 sprintf( wirelabel,
"%02dS%02d-%d", ilay + 1, ampid + 1, channel + 1 );
208 sprintf( wiretag,
"%02d_%02d_%04d_%02d", ilay, icell, iwire, ampid + 1 );
214 m_pwire[iwire]->setWireId( iwire );
215 m_pwire[iwire]->setLayerId( ilay );
216 m_pwire[iwire]->setCellId( icell );
217 m_pwire[iwire]->setPreAmpId( ampid + 1 );
218 m_pwire[iwire]->setChannel( channel );
221 iFan = m_fan[ilay][ampid];
223 m_pwire[iwire]->setFanId(
abs( iFan ) );
224 if ( iFan > 0 ) m_pwire[iwire]->setEndId( 1 );
225 else m_pwire[iwire]->setEndId( -1 );
227 m_pwire[iwire]->setWireLabel( wirelabel );
228 m_pwire[iwire]->setWireTag( wiretag );
230 m_pwire[iwire]->setXf( xf );
231 m_pwire[iwire]->setYf( yf );
232 m_pwire[iwire]->setZf( zf );
234 m_pwire[iwire]->setXb( xb );
235 m_pwire[iwire]->setYb( yb );
236 m_pwire[iwire]->setZb( zb );
238 if ( angleforw < 0 ) angleforw += 2.0 *
PI;
239 m_pwire[iwire]->setPhiForward( angleforw );
241 m_pwire[iwire]->setTension( tension[ilay] );
247 cout <<
"INFO: Number of wires: " << iwire << endl;