307 {
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326 G4double totalThickness = fTyvekThickness + fAlThickness + fMylarThickness;
327 G4double delta = 0., angle1 = 0. * deg, angle2 = 0. * deg;
328 G4double oop;
329
330 G4double rminprojected = BSCRmin *
cos( BSCAngleRotat );
331 rminprojected = BSCRmin;
332
333 G4int i;
334 for ( i = 0; i < BSCNbTheta; i++ )
335 {
336 zHalfLength[BSCNbTheta + i] = totalThickness / 2.;
337 yHalfLength1[BSCNbTheta + i] = yHalfLength1[i];
338 yHalfLength2[BSCNbTheta + i] = yHalfLength1[i] + ( yHalfLength2[i] - yHalfLength1[i] ) *
339 totalThickness / BSCCryLength;
340 xHalfLength1[BSCNbTheta + i] = xHalfLength1[i];
341 xHalfLength2[BSCNbTheta + i] = xHalfLength2[i];
342 xHalfLength1[BSCNbTheta * 2 + i] = xHalfLength3[BSCNbTheta + i] =
343 xHalfLength1[i] * ( BSCCryLength - totalThickness ) / BSCCryLength +
344 xHalfLength3[i] * totalThickness / BSCCryLength;
345 xHalfLength2[BSCNbTheta * 4 + i] = xHalfLength4[BSCNbTheta + i] =
346 xHalfLength2[i] * ( BSCCryLength - totalThickness ) / BSCCryLength +
347 xHalfLength4[i] * totalThickness / BSCCryLength;
348
349 zHalfLength[BSCNbTheta * 5 + i] = zHalfLength[BSCNbTheta * 4 + i] =
350 zHalfLength[BSCNbTheta * 3 + i] = zHalfLength[BSCNbTheta * 2 + i] =
351 zHalfLength[i] - totalThickness / 2.;
352
353 yHalfLength2[BSCNbTheta * 2 + i] = yHalfLength1[BSCNbTheta * 2 + i] =
354 totalThickness /
cos( thetaPosition[i + 1] - thetaPosition[i] ) / 2.;
355 xHalfLength3[BSCNbTheta * 2 + i] = xHalfLength3[i];
356 xHalfLength4[BSCNbTheta * 2 + i] =
357 xHalfLength3[i] + ( xHalfLength4[i] - xHalfLength3[i] ) *
358 yHalfLength2[BSCNbTheta * 2 + i] / yHalfLength2[i];
359 xHalfLength2[BSCNbTheta * 2 + i] =
360 xHalfLength3[BSCNbTheta + i] +
361 ( xHalfLength4[BSCNbTheta + i] - xHalfLength3[BSCNbTheta + i] ) *
362 yHalfLength1[BSCNbTheta * 2 + i] / yHalfLength2[BSCNbTheta * 1 + i];
363
364 yHalfLength2[BSCNbTheta * 4 + i] = yHalfLength1[BSCNbTheta * 4 + i] = totalThickness / 2.;
365 xHalfLength4[BSCNbTheta * 4 + i] = xHalfLength4[i];
366 xHalfLength3[BSCNbTheta * 4 + i] =
367 xHalfLength4[i] - ( xHalfLength4[i] - xHalfLength3[i] ) *
368 yHalfLength2[BSCNbTheta * 4 + i] / yHalfLength2[i];
369 xHalfLength1[BSCNbTheta * 4 + i] =
370 xHalfLength4[BSCNbTheta + i] -
371 ( xHalfLength4[BSCNbTheta + i] - xHalfLength3[BSCNbTheta + i] ) *
372 yHalfLength1[BSCNbTheta * 4 + i] / yHalfLength2[BSCNbTheta * 1 + i];
373
374 delta = totalThickness / 2. + yHalfLength1[BSCNbTheta * 2 + i];
375 angle1 = atan( yHalfLength2[i] / ( xHalfLength4[i] - xHalfLength3[i] ) );
376 angle2 = atan( 2. * ( xHalfLength4[i] - xHalfLength2[i] ) *
sin( angle1 ) / BSCCryLength );
377
378 yHalfLength1[BSCNbTheta * 5 + i] = yHalfLength1[BSCNbTheta * 3 + i] =
379 yHalfLength1[i] - delta;
380 yHalfLength2[BSCNbTheta * 5 + i] = yHalfLength2[BSCNbTheta * 3 + i] =
381 yHalfLength2[i] - delta;
382 xHalfLength4[BSCNbTheta * 3 + i] = xHalfLength3[BSCNbTheta * 3 + i] =
383 xHalfLength2[BSCNbTheta * 3 + i] = xHalfLength1[BSCNbTheta * 3 + i] =
384 totalThickness /
cos( angle2 ) /
sin( angle1 ) / 2.;
385 xHalfLength4[BSCNbTheta * 5 + i] = xHalfLength3[BSCNbTheta * 5 + i] =
386 xHalfLength2[BSCNbTheta * 5 + i] = xHalfLength1[BSCNbTheta * 5 + i] =
387 totalThickness / 2.;
388
389 zHalfLength[i] = zHalfLength[i] - totalThickness / 2.;
390 yHalfLength1[i] = yHalfLength1[i] - delta;
391 yHalfLength2[i] = yHalfLength2[i] - delta;
392 delta = totalThickness * ( 1. + 1. /
cos( angle2 ) /
sin( angle1 ) ) / 2.;
393 xHalfLength1[i] = xHalfLength1[i] - delta;
394 xHalfLength2[i] = xHalfLength2[i] - delta;
395 xHalfLength3[i] = xHalfLength3[i] - delta;
396 xHalfLength4[i] = xHalfLength4[i] - delta;
397
398 oop = sqrt( ( yHalfLength2[i] - yHalfLength1[i] ) * ( yHalfLength2[i] - yHalfLength1[i] ) +
399 ( xHalfLength3[i] + xHalfLength4[i] - xHalfLength1[i] - xHalfLength2[i] ) *
400 ( xHalfLength3[i] + xHalfLength4[i] - xHalfLength1[i] - xHalfLength2[i] ) /
401 4 );
402 thetaAxis[i] = atan( oop / BSCCryLength );
403
404 phiAxis[i] =
405 180. * deg +
406 atan( ( yHalfLength2[i] - yHalfLength1[i] ) /
407 ( xHalfLength3[i] + xHalfLength4[i] - xHalfLength1[i] - xHalfLength2[i] ) * 2. );
408
409 oop = sqrt( ( yHalfLength2[BSCNbTheta + i] - yHalfLength1[BSCNbTheta + i] ) *
410 ( yHalfLength2[BSCNbTheta + i] - yHalfLength1[BSCNbTheta + i] ) +
411 ( xHalfLength3[BSCNbTheta + i] + xHalfLength4[BSCNbTheta + i] -
412 xHalfLength1[BSCNbTheta + i] - xHalfLength2[BSCNbTheta + i] ) *
413 ( xHalfLength3[BSCNbTheta + i] + xHalfLength4[BSCNbTheta + i] -
414 xHalfLength1[BSCNbTheta + i] - xHalfLength2[BSCNbTheta + i] ) /
415 4 );
416 thetaAxis[BSCNbTheta + i] = atan( oop / totalThickness );
417 phiAxis[BSCNbTheta + i] =
418 -atan( ( yHalfLength2[BSCNbTheta + i] - yHalfLength1[BSCNbTheta + i] ) /
419 ( xHalfLength3[BSCNbTheta + i] + xHalfLength4[BSCNbTheta + i] -
420 xHalfLength1[BSCNbTheta + i] - xHalfLength2[BSCNbTheta + i] ) *
421 2. );
422
423 oop = sqrt( ( yHalfLength2[i] - yHalfLength1[i] ) * ( yHalfLength2[i] - yHalfLength1[i] ) *
424 4 +
425 ( xHalfLength3[BSCNbTheta * 2 + i] + xHalfLength4[BSCNbTheta * 2 + i] -
426 xHalfLength1[BSCNbTheta * 2 + i] - xHalfLength2[BSCNbTheta * 2 + i] ) *
427 ( xHalfLength3[BSCNbTheta * 2 + i] + xHalfLength4[BSCNbTheta * 2 + i] -
428 xHalfLength1[BSCNbTheta * 2 + i] - xHalfLength2[BSCNbTheta * 2 + i] ) /
429 4 );
430 thetaAxis[BSCNbTheta * 2 + i] = atan( oop / ( zHalfLength[BSCNbTheta * 2 + i] * 2 ) );
431 phiAxis[BSCNbTheta * 2 + i] =
432 -atan( ( yHalfLength2[i] - yHalfLength1[i] ) /
433 ( xHalfLength3[BSCNbTheta * 2 + i] + xHalfLength4[BSCNbTheta * 2 + i] -
434 xHalfLength1[BSCNbTheta * 2 + i] - xHalfLength2[BSCNbTheta * 2 + i] ) *
435 4 );
436
437 oop = sqrt(
438 ( yHalfLength2[i] - yHalfLength1[i] ) * ( yHalfLength2[i] - yHalfLength1[i] ) * 4 +
439 ( xHalfLength4[i] - xHalfLength2[i] ) * ( xHalfLength4[i] - xHalfLength2[i] ) * 4 );
440 thetaAxis[BSCNbTheta * 3 + i] = atan( oop / ( zHalfLength[BSCNbTheta * 3 + i] * 2 ) );
441 phiAxis[BSCNbTheta * 3 + i] =
442 -atan( ( yHalfLength2[i] - yHalfLength1[i] ) / ( xHalfLength4[i] - xHalfLength2[i] ) );
443
444 thetaAxis[BSCNbTheta * 4 + i] =
445 atan( ( xHalfLength4[BSCNbTheta * 4 + i] + xHalfLength3[BSCNbTheta * 4 + i] -
446 xHalfLength2[BSCNbTheta * 4 + i] - xHalfLength1[BSCNbTheta * 4 + i] ) /
447 2. / ( zHalfLength[BSCNbTheta * 4 + i] * 2 ) );
448 phiAxis[BSCNbTheta * 4 + i] = 0;
449
450 thetaAxis[BSCNbTheta * 5 + i] =
451 atan( ( xHalfLength3[BSCNbTheta * 5 + i] - xHalfLength1[BSCNbTheta * 5 + i] ) /
452 ( zHalfLength[BSCNbTheta * 5 + i] * 2 ) );
453 phiAxis[BSCNbTheta * 5 + i] = -90. * deg;
454
455 tanAlpha2[BSCNbTheta + i] = tanAlpha1[BSCNbTheta + i] = tanAlpha1[i] =
456 -( xHalfLength2[i] - xHalfLength1[i] ) / yHalfLength1[i] / 2.;
457 tanAlpha1[BSCNbTheta * 2 + i] =
458 ( xHalfLength2[BSCNbTheta * 2 + i] - xHalfLength1[BSCNbTheta * 2 + i] ) /
459 yHalfLength1[BSCNbTheta * 2 + i] / 2.;
460 tanAlpha1[BSCNbTheta * 3 + i] = tanAlpha1[i] * 2.;
461 tanAlpha1[BSCNbTheta * 4 + i] =
462 ( xHalfLength2[BSCNbTheta * 4 + i] - xHalfLength1[BSCNbTheta * 4 + i] ) /
463 yHalfLength1[BSCNbTheta * 4 + i] / 2.;
464 tanAlpha1[BSCNbTheta * 5 + i] =
465 ( xHalfLength2[BSCNbTheta * 5 + i] - xHalfLength1[BSCNbTheta * 5 + i] ) /
466 yHalfLength1[BSCNbTheta * 5 + i] / 2.;
467
468 tanAlpha2[i] = -( xHalfLength4[i] - xHalfLength3[i] ) / yHalfLength2[i] / 2.;
469
470 tanAlpha2[BSCNbTheta * 2 + i] =
471 ( xHalfLength4[BSCNbTheta * 2 + i] - xHalfLength3[BSCNbTheta * 2 + i] ) /
472 yHalfLength2[BSCNbTheta * 2 + i] / 2.;
473 tanAlpha2[BSCNbTheta * 3 + i] = tanAlpha2[i] * 2.;
474 tanAlpha2[BSCNbTheta * 4 + i] =
475 ( xHalfLength4[BSCNbTheta * 4 + i] - xHalfLength3[BSCNbTheta * 4 + i] ) /
476 yHalfLength2[BSCNbTheta * 4 + i] / 2.;
477 tanAlpha2[BSCNbTheta * 5 + i] =
478 ( xHalfLength4[BSCNbTheta * 5 + i] - xHalfLength3[BSCNbTheta * 5 + i] ) /
479 yHalfLength2[BSCNbTheta * 5 + i] / 2.;
480
481 zPosition[BSCNbTheta * 5 + i] = zPosition[BSCNbTheta * 3 + i] = zPosition[i] =
482 zPosition[i] + totalThickness / 2. *
cos( thetaPosition[i] ) -
483 yHalfLength1[BSCNbTheta * 2 + i] *
sin( thetaPosition[i] );
484 zPosition[i] = totalThickness / 2.;
485 xPosition[BSCNbTheta * 5 + i] = xPosition[BSCNbTheta * 3 + i] = xPosition[i] =
486 xPosition[i] + totalThickness / 2. *
sin( thetaPosition[i] ) +
487 totalThickness * ( 1. /
cos( thetaPosition[i + 1] - thetaPosition[i] ) - 1 ) / 2. *
488 cos( thetaPosition[i] );
489 xPosition[i] = totalThickness * ( 1. - 1. /
cos( angle2 ) /
sin( angle1 ) ) / 2.;
490
491 yPosition[i] =
492 yPosition[i] + totalThickness * ( 1. - 1. /
cos( angle2 ) /
sin( angle1 ) ) / 2.;
493 yPosition[i] =
494 yHalfLength1[BSCNbTheta * 2 + i] - totalThickness / 2.;
495 yPosition[BSCNbTheta * 3 + i] = yPosition[i] * 2. + xHalfLength1[BSCNbTheta * 3 + i];
496 yPosition[BSCNbTheta * 5 + i] = xHalfLength1[BSCNbTheta * 5 + i];
497
498 xPosition[BSCNbTheta + i] =
499 BSCPhiRmin + zHalfLength[BSCNbTheta + i] *
sin( thetaPosition[i] ) +
500 ( 3. * yHalfLength1[BSCNbTheta + i] - yHalfLength2[BSCNbTheta + i] ) / 2. *
501 cos( thetaPosition[i] );
502 yPosition[BSCNbTheta + i] =
503 ( xHalfLength1[BSCNbTheta + i] + xHalfLength3[BSCNbTheta + i] +
504 xHalfLength2[BSCNbTheta + i] + xHalfLength4[BSCNbTheta + i] ) /
505 4.;
506 zPosition[BSCNbTheta + i] =
507 BSCPosition1 + rminprojected /
tan( thetaPosition[i] ) +
508 ( 2. * yHalfLength1[BSCNbTheta + i] /
tan( thetaPosition[i] ) +
509 zHalfLength[BSCNbTheta + i] ) *
510 cos( thetaPosition[i] ) +
511 ( yHalfLength1[BSCNbTheta + i] + yHalfLength2[BSCNbTheta + i] ) / 2. *
512 sin( thetaPosition[i] );
513
514 xPosition[BSCNbTheta * 2 + i] =
515 xPosition[i] +
516 ( ( yHalfLength1[i] + yHalfLength2[i] ) / 2. + yHalfLength1[BSCNbTheta * 2 + i] ) *
517 cos( thetaPosition[i] );
518 zPosition[BSCNbTheta * 2 + i] =
519 zPosition[i] -
520 ( ( yHalfLength1[i] + yHalfLength2[i] ) / 2. + yHalfLength1[BSCNbTheta * 2 + i] ) *
521 sin( thetaPosition[i] );
522 yPosition[BSCNbTheta * 2 + i] =
523 ( xHalfLength1[BSCNbTheta * 2 + i] + xHalfLength3[BSCNbTheta * 2 + i] +
524 xHalfLength2[BSCNbTheta * 2 + i] + xHalfLength4[BSCNbTheta * 2 + i] ) /
525 4.;
526
527 xPosition[BSCNbTheta * 4 + i] =
528 xPosition[i] -
529 ( ( yHalfLength1[i] + yHalfLength2[i] ) / 2. + yHalfLength1[BSCNbTheta * 4 + i] ) *
530 cos( thetaPosition[i] );
531 zPosition[BSCNbTheta * 4 + i] =
532 zPosition[i] -
533 ( ( yHalfLength1[i] + yHalfLength2[i] ) / 2. + yHalfLength1[BSCNbTheta * 4 + i] ) *
534 sin( thetaPosition[i] );
535 yPosition[BSCNbTheta * 4 + i] =
536 ( xHalfLength1[BSCNbTheta * 4 + i] + xHalfLength3[BSCNbTheta * 4 + i] +
537 xHalfLength2[BSCNbTheta * 4 + i] + xHalfLength4[BSCNbTheta * 4 + i] ) /
538 4.;
539 }
540
541 if ( verboseLevel > 1 )
542 for ( i = 0; i < BSCNbTheta * 6; i++ )
543 {
544 G4cout << "The sizes of the " << i + 1 << " crystal are:" << G4endl
545 << "zHalfLength =" << zHalfLength[i] / cm << "(cm)," << G4endl
546 << "thetaAxis =" << thetaAxis[i] / deg << "(deg)," << G4endl
547 << "phiAxis =" << phiAxis[i] / deg << "(deg)," << G4endl
548 << "yHalfLength1=" << yHalfLength1[i] / cm << "(cm)," << G4endl
549 << "xHalfLength1=" << xHalfLength1[i] / cm << "(cm)," << G4endl
550 << "xHalfLength2=" << xHalfLength2[i] / cm << "(cm)," << G4endl
551 << "tanAlpha1 =" << tanAlpha1[i] << G4endl
552 << "yHalfLength2=" << yHalfLength2[i] / cm << "(cm)," << G4endl
553 << "xHalfLength3=" << xHalfLength3[i] / cm << "(cm)," << G4endl
554 << "xHalfLength4=" << xHalfLength4[i] / cm << "(cm)," << G4endl
555 << "tanAlpha2 =" << tanAlpha2[i] << "." << G4endl << "The position of the "
556 << i + 1 << " crystal is:" << G4endl << "(" << xPosition[i] / cm << ","
557 << yPosition[i] / cm << "," << zPosition[i] / cm << ")cm" << G4endl;
558 }
559}