Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MakeCDCConstraintsFile.C
Go to the documentation of this file.
1 void MakeCDCConstraintsFile(bool perRing = true){
2 
3  // Some CDC geometry information
4  int straw_offset[29] = {0,0,42,84,138,192,258,324,404,484,577,670,776,882,1005,1128,1263,1398,1544,1690,1848,2006,2176,2346,2528,2710,2907,3104,3313};
5  int Nstraws[28] = {42, 42, 54, 54, 66, 66, 80, 80, 93, 93, 106, 106, 123, 123, 135, 135, 146, 146, 158, 158, 170, 170, 182, 182, 197, 197, 209, 209};
6  double radius[28] = {10.72134, 12.08024, 13.7795, 15.14602, 18.71726, 20.2438, 22.01672, 23.50008, 25.15616, 26.61158, 28.33624, 29.77388, 31.3817, 32.75838, 34.43478, 35.81146, 38.28542, 39.7002, 41.31564, 42.73042, 44.34078, 45.75302, 47.36084, 48.77054, 50.37582, 51.76012, 53.36286, 54.74716};
7  double phi[28] = {0, 0.074707844, 0.038166294, 0.096247609, 0.05966371, 0.012001551, 0.040721951, 0.001334527, 0.014963808, 0.048683644, 0.002092645, 0.031681749, 0.040719354, 0.015197341, 0.006786058, 0.030005892, 0.019704045, -0.001782064, -0.001306618, 0.018592421, 0.003686784, 0.022132975, 0.019600866, 0.002343723, 0.021301449, 0.005348855, 0.005997358, 0.021018761};
8  double phi_ds[28] = { 0.000557611,0.0764693,0.0385138,0.0975182,-0.816345,-0.864077,-0.696401,-0.736506,0.656304,0.690227,0.57023,0.599326,0.0410675,0.0145592,0.00729358,0.0296972,0.43739,0.415211,0.38506,0.405461,-0.355973,-0.337391,-0.317012,-0.334703,0.0212654,0.0058214,0.005997358,0.0213175};
9  // Four output files
10  ofstream outFile_dxu;
11  outFile_dxu.open("dxu_Constraints.txt");
12  ofstream outFile_dxd;
13  outFile_dxd.open("dxd_Constraints.txt");
14  ofstream outFile_dyu;
15  outFile_dyu.open("dyu_Constraints.txt");
16  ofstream outFile_dyd;
17  outFile_dyd.open("dyd_Constraints.txt");
18 
19  if (!perRing){
20  outFile_dxu << "Contraint 0.0" << endl;
21  outFile_dxd << "Contraint 0.0" << endl;
22  outFile_dyu << "Contraint 0.0" << endl;
23  outFile_dyd << "Contraint 0.0" << endl;
24  }
25  // No shrinking or stretching of CDC
26  // Loop over the rings
27  //ofstream outFile_dxu;
28  //ofstream outFile_dxd;
29  //ofstream outFile_dyu;
30  //ofstream outFile_dyd;
31 
32  for (unsigned int iRing = 1; iRing <= 28; iRing++){
33  //Get angular spacing between straws
34  double dPhi = 2*TMath::Pi() / Nstraws[iRing-1];
35  if (perRing){
36  outFile_dxu << "Contraint 0.0" << endl;
37  outFile_dxd << "Contraint 0.0" << endl;
38  outFile_dyu << "Contraint 0.0" << endl;
39  outFile_dyd << "Contraint 0.0" << endl;
40  }
41  //Loop over straws
42  for (unsigned int iStraw = 1; iStraw <= Nstraws[iRing-1]; iStraw++){
43  int index = straw_offset[iRing]+iStraw;
44  int dxu_index = 1000 + (index-1)*4 +1;
45  int dyu_index = 1000 + (index-1)*4 +2;
46  int dxd_index = 1000 + (index-1)*4 +3;
47  int dyd_index = 1000 + (index-1)*4 +4;
48 
49  double ConstraintXU = TMath::Cos(phi[iRing-1] + dPhi*(iStraw-1));
50  double ConstraintXD = TMath::Cos(phi_ds[iRing-1] + dPhi*(iStraw-1));
51  double ConstraintYU = TMath::Sin(phi[iRing-1] + dPhi*(iStraw-1));
52  double ConstraintYD = TMath::Sin(phi_ds[iRing-1] + dPhi*(iStraw-1));
53 
54  outFile_dxu << dxu_index << " " << ConstraintXU << endl;
55  outFile_dxd << dxd_index << " " << ConstraintXD << endl;
56  outFile_dyu << dyu_index << " " << ConstraintYU << endl;
57  outFile_dyd << dyd_index << " " << ConstraintYD << endl;
58 
59  }
60  }
61 
62  if (!perRing){
63  outFile_dxu << "Contraint 0.0" << endl;
64  outFile_dxd << "Contraint 0.0" << endl;
65  outFile_dyu << "Contraint 0.0" << endl;
66  outFile_dyd << "Contraint 0.0" << endl;
67  }
68  // No shrinking or stretching of CDC
69  // Loop over the rings
70  //ofstream outFile_dxu;
71  //ofstream outFile_dxd;
72  //ofstream outFile_dyu;
73  //ofstream outFile_dyd;
74 
75  for (unsigned int iRing = 1; iRing <= 28; iRing++){
76  //Get angular spacing between straws
77  double dPhi = 2*TMath::Pi() / Nstraws[iRing-1];
78  if (perRing){
79  outFile_dxu << "Contraint 0.0" << endl;
80  outFile_dxd << "Contraint 0.0" << endl;
81  outFile_dyu << "Contraint 0.0" << endl;
82  outFile_dyd << "Contraint 0.0" << endl;
83  }
84  //Loop over straws
85  for (unsigned int iStraw = 1; iStraw <= Nstraws[iRing-1]; iStraw++){
86  int index = straw_offset[iRing]+iStraw;
87  int dxu_index = 1000 + (index-1)*4 +1;
88  int dyu_index = 1000 + (index-1)*4 +2;
89  int dxd_index = 1000 + (index-1)*4 +3;
90  int dyd_index = 1000 + (index-1)*4 +4;
91 
92  double ConstraintXU = TMath::Sin(phi[iRing-1] + dPhi*(iStraw-1));
93  double ConstraintXD = TMath::Sin(phi_ds[iRing-1] + dPhi*(iStraw-1));
94  double ConstraintYU = TMath::Cos(phi[iRing-1] + dPhi*(iStraw-1));
95  double ConstraintYD = TMath::Cos(phi_ds[iRing-1] + dPhi*(iStraw-1));
96 
97  outFile_dxu << dxu_index << " " << ConstraintXU << endl;
98  outFile_dxd << dxd_index << " " << ConstraintXD << endl;
99  outFile_dyu << dyu_index << " " << ConstraintYU << endl;
100  outFile_dyd << dyd_index << " " << ConstraintYD << endl;
101  }
102  }
103  /*
104  // Suppress next order of harmonics
105  if (!perRing){
106  outFile_dxu << "Contraint 0.0" << endl;
107  outFile_dxd << "Contraint 0.0" << endl;
108  outFile_dyu << "Contraint 0.0" << endl;
109  outFile_dyd << "Contraint 0.0" << endl;
110  }
111  for (unsigned int iRing = 1; iRing <= 28; iRing++){
112 //Get angular spacing between straws
113 double dPhi = 2*TMath::Pi() / Nstraws[iRing-1];
114 if (perRing){
115 outFile_dxu << "Contraint 0.0" << endl;
116 outFile_dxd << "Contraint 0.0" << endl;
117 outFile_dyu << "Contraint 0.0" << endl;
118 outFile_dyd << "Contraint 0.0" << endl;
119 }
120 //Loop over straws
121 for (unsigned int iStraw = 1; iStraw <= Nstraws[iRing-1]; iStraw++){
122 int index = straw_offset[iRing]+iStraw;
123 int dxu_index = (index-1)*4 +1;
124 int dxd_index = (index-1)*4 +2;
125 int dyu_index = (index-1)*4 +3;
126 int dyd_index = (index-1)*4 +4;
127 
128 double ConstraintXU = TMath::Cos(phi[iRing-1] + dPhi*(iStraw-1)*2);
129 double ConstraintXD = TMath::Cos(phi_ds[iRing-1] + dPhi*(iStraw-1)*2);
130 double ConstraintYU = TMath::Sin(phi[iRing-1] + dPhi*(iStraw-1)*2);
131 double ConstraintYD = TMath::Sin(phi_ds[iRing-1] + dPhi*(iStraw-1)*2);
132 
133 outFile_dxu << dxu_index << " " << ConstraintXU << endl;
134 outFile_dxd << dxd_index << " " << ConstraintXD << endl;
135 outFile_dyu << dyu_index << " " << ConstraintYU << endl;
136 outFile_dyd << dyd_index << " " << ConstraintYD << endl;
137 
138 }
139 }
140 */
141 outFile_dxu << "Contraint 0.0" << endl;
142 outFile_dxd << "Contraint 0.0" << endl;
143 outFile_dyu << "Contraint 0.0" << endl;
144 outFile_dyd << "Contraint 0.0" << endl;
145 
146 //No global shifts
147 for (unsigned int iRing = 1; iRing <= 28; iRing++){
148  //Get angular spacing between straws
149  double dPhi = 2*TMath::Pi() / Nstraws[iRing-1];
150  //Loop over straws
151  for (unsigned int iStraw = 1; iStraw <= Nstraws[iRing-1]; iStraw++){
152  int index = straw_offset[iRing]+iStraw;
153  int dxu_index = 1000 + (index-1)*4 +1;
154  int dyu_index = 1000 + (index-1)*4 +2;
155  int dxd_index = 1000 + (index-1)*4 +3;
156  int dyd_index = 1000 + (index-1)*4 +4;
157 
158  double ConstraintX = 1;
159  double ConstraintY = 1;
160 
161  outFile_dxu << dxu_index << " " << ConstraintX << endl;
162  outFile_dxd << dxd_index << " " << ConstraintX << endl;
163  outFile_dyu << dyu_index << " " << ConstraintY << endl;
164  outFile_dyd << dyd_index << " " << ConstraintY << endl;
165 
166  }
167 }
168 
169 outFile_dxu.close();
170 outFile_dxd.close();
171 outFile_dyu.close();
172 outFile_dyd.close();
173 return;
174 }
static char index(char c)
Definition: base64.cpp:115
void MakeCDCConstraintsFile(bool perRing=true)