ROOT logo
//____________________________________________________________________
//
// $Id$
//
// Small script that I used to make some intial testing of the wafer
// layout and geometry. 
//
// Christian 
// 
/** Calculate wafer parameters
    @param c 
    @return  
    @ingroup simple_script
*/
TObjArray*
WaferParameters(const char c)
{      
  double dl;
  double dh;
  double r     = 134 / 2;
  double theta;
  switch (c) {
  case 'i': 
    dl     = 43;
    dh     = 172;
    theta  = 18;
    break;
  case 'o':
    dl     = 156;
    dh     = 280;
    theta  = 9;
    break;
  default:
    cerr << "Unknown wafer type: " << c << endl;
    return;
  }
  

  double tan_theta  = tan(theta * TMath::Pi() / 180.);
  double tan_theta2 = pow(tan_theta,2);
  double r2         = pow(r,2);
  double y_A        = tan_theta * dl;
  double x_D        = dl + sqrt(r2 - tan_theta2 * pow(dl,2));
  double x_D_2      = dl - sqrt(r2 - tan_theta2 * pow(dl,2));
  
  double y_B       = sqrt(r2 - pow(dh,2) + 2 * dh * x_D - pow(x_D,2));
  double x_C       = (x_D + sqrt(-tan_theta2 * pow(x_D,2) + r2 
				 + r2 * tan_theta2)) / (1 + tan_theta2);
  double y_C       = tan_theta * x_C;

  cout << "A: (" << dl << "," << y_A << ")" << endl;
  cout << "B: (" << dh << "," << y_B << ")" << endl;
  cout << "C: (" << x_C << "," << y_C << ")" << endl;
  cout << "D: (" << x_D << ",0)" << endl;
  
  cout << "Recentred at D:"  << endl;
  cout << "A: (" << dl - x_D  << "," << y_A << ")" << endl;
  cout << "B: (" << dh - x_D  << "," << y_B << ")" << endl;
  cout << "C: (" << x_C - x_D << "," << y_C << ")" << endl;

  TObjArray* verticies = new TObjArray(6);
  verticies->AddAt(new TVector2(dl,   y_A), 0);
  verticies->AddAt(new TVector2(x_C,  y_C), 1);
  verticies->AddAt(new TVector2(dh,   y_B), 2);
  verticies->AddAt(new TVector2(dh,  -y_B), 3);
  verticies->AddAt(new TVector2(x_C, -y_C), 4);
  verticies->AddAt(new TVector2(dl,  -y_A), 5);
  
  return verticies;
}

/** Draw wafers
    @ingroup simple_script
 */
void
Wafer()
{
  TCanvas* can = new TCanvas("can", "c", 400, 600);
  can->SetBorderMode(0);
  can->SetFillColor(0);
  
  TGeometry* g = new TGeometry("g", "G");
  TShape* topShape  = new TBRIK("top", "top", "", 100, 100, 100);
  TNode*  topNode = new TNode("top", "top", "top", 0, 0, 0);
  topNode->SetLineWidth(0);
  topNode->SetVisibility(0);

  TShape* virtualShape = new TTUBS("virtual", "Virtual", "", 
				   43, 172, 1, -18, 18);
  
  TObjArray* v = WaferParameters('i');
  TXTRU* moduleShape = new TXTRU("module", "module", "", 6, 2);
  for (Int_t i = 0; i  < 6; i++) {
    TVector2* vv = static_cast<TVector2*>(v->At(i));
    moduleShape->DefineVertex(i, vv->X(), vv->Y());
  }
  moduleShape->DefineSection(0, -1, 1, 0, 0);
  moduleShape->DefineSection(1,  1, 1, 0, 0);

  for (Int_t i = 0; i < 10; i++) {
    topNode->cd();
    Double_t theta   = 36 * i;
    Double_t z = (i % 2 ? +5 : -5);
    TRotMatrix* rot = new TRotMatrix(Form("rotation%02d", i), "Rotation", 
				     90, theta, 90, 
				     fmod(90 + theta, 360), 0, 0);
    TNode* moduleNode = new TNode(Form("module%02d", i), 
				  "Module", moduleShape, 0, 0, z,
				  rot);
    if (i == 0) {
      moduleNode->SetFillColor(2);
      moduleNode->SetLineColor(2);
      moduleNode->SetLineWidth(2);
    }
  }
  g->Draw();
  TView* view = can->GetView();
  view->SetPerspective();
  Int_t a;
  view->SetView(1.81208, 66.6725, 90, a);
  view->Zoom();
  view->Zoom();  
  view->Zoom();  
  can->Modified();
  can->cd();

  can->Print("fmd_module1.gif");
  // std::cout << "Waiting ..." << std::flush;
  // Char_t c = std::cin.get();
  
  topNode->cd();
  TNode* virtualNode = new TNode("virtual", "Virtual", 
				 virtualShape, 0, 0, -5);
  virtualNode->SetLineColor(3);
  virtualNode->SetLineWidth(2);
  virtualNode->SetLineStyle(2);
  g->Draw();
  view->SetPerspective();
  view->SetView(1.81208, 66.6725, 90, a);
  view->Zoom();
  view->Zoom();  
  view->Zoom();  
  can->Modified();
  can->cd();
  can->Print("fmd_module2.gif");
  
}
//____________________________________________________________________
//
// EOF
//





  
 Wafer.C:1
 Wafer.C:2
 Wafer.C:3
 Wafer.C:4
 Wafer.C:5
 Wafer.C:6
 Wafer.C:7
 Wafer.C:8
 Wafer.C:9
 Wafer.C:10
 Wafer.C:11
 Wafer.C:12
 Wafer.C:13
 Wafer.C:14
 Wafer.C:15
 Wafer.C:16
 Wafer.C:17
 Wafer.C:18
 Wafer.C:19
 Wafer.C:20
 Wafer.C:21
 Wafer.C:22
 Wafer.C:23
 Wafer.C:24
 Wafer.C:25
 Wafer.C:26
 Wafer.C:27
 Wafer.C:28
 Wafer.C:29
 Wafer.C:30
 Wafer.C:31
 Wafer.C:32
 Wafer.C:33
 Wafer.C:34
 Wafer.C:35
 Wafer.C:36
 Wafer.C:37
 Wafer.C:38
 Wafer.C:39
 Wafer.C:40
 Wafer.C:41
 Wafer.C:42
 Wafer.C:43
 Wafer.C:44
 Wafer.C:45
 Wafer.C:46
 Wafer.C:47
 Wafer.C:48
 Wafer.C:49
 Wafer.C:50
 Wafer.C:51
 Wafer.C:52
 Wafer.C:53
 Wafer.C:54
 Wafer.C:55
 Wafer.C:56
 Wafer.C:57
 Wafer.C:58
 Wafer.C:59
 Wafer.C:60
 Wafer.C:61
 Wafer.C:62
 Wafer.C:63
 Wafer.C:64
 Wafer.C:65
 Wafer.C:66
 Wafer.C:67
 Wafer.C:68
 Wafer.C:69
 Wafer.C:70
 Wafer.C:71
 Wafer.C:72
 Wafer.C:73
 Wafer.C:74
 Wafer.C:75
 Wafer.C:76
 Wafer.C:77
 Wafer.C:78
 Wafer.C:79
 Wafer.C:80
 Wafer.C:81
 Wafer.C:82
 Wafer.C:83
 Wafer.C:84
 Wafer.C:85
 Wafer.C:86
 Wafer.C:87
 Wafer.C:88
 Wafer.C:89
 Wafer.C:90
 Wafer.C:91
 Wafer.C:92
 Wafer.C:93
 Wafer.C:94
 Wafer.C:95
 Wafer.C:96
 Wafer.C:97
 Wafer.C:98
 Wafer.C:99
 Wafer.C:100
 Wafer.C:101
 Wafer.C:102
 Wafer.C:103
 Wafer.C:104
 Wafer.C:105
 Wafer.C:106
 Wafer.C:107
 Wafer.C:108
 Wafer.C:109
 Wafer.C:110
 Wafer.C:111
 Wafer.C:112
 Wafer.C:113
 Wafer.C:114
 Wafer.C:115
 Wafer.C:116
 Wafer.C:117
 Wafer.C:118
 Wafer.C:119
 Wafer.C:120
 Wafer.C:121
 Wafer.C:122
 Wafer.C:123
 Wafer.C:124
 Wafer.C:125
 Wafer.C:126
 Wafer.C:127
 Wafer.C:128
 Wafer.C:129
 Wafer.C:130
 Wafer.C:131
 Wafer.C:132
 Wafer.C:133
 Wafer.C:134
 Wafer.C:135
 Wafer.C:136
 Wafer.C:137
 Wafer.C:138
 Wafer.C:139
 Wafer.C:140
 Wafer.C:141
 Wafer.C:142
 Wafer.C:143
 Wafer.C:144
 Wafer.C:145
 Wafer.C:146
 Wafer.C:147
 Wafer.C:148
 Wafer.C:149
 Wafer.C:150
 Wafer.C:151
 Wafer.C:152
 Wafer.C:153
 Wafer.C:154
 Wafer.C:155
 Wafer.C:156
 Wafer.C:157
 Wafer.C:158