FairRoot/PandaRoot
PndGeoHypGeBase.cxx
Go to the documentation of this file.
1 /*
2  * PndGeoHypGeBase.cxx
3  *
4  * Copyright 2012 Marcell Steinen <steinen@kph.uni-mainz.de>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19  * MA 02110-1301, USA.
20  *
21  *
22  */
23 
24 
25 #include "PndGeoHypGeBase.h"
26 
27 
28 using namespace std;
29 
31 
33 {
34 
35 }
36 
37 
39 {
40 
41 }
42 
43 void PndGeoHypGeBase::BuildTArb8Array(Double_t *OutputArray, Int_t Point1, Int_t Point2, Int_t Offset1, Int_t Offset2,Int_t ShiftValue,Int_t NumberOfPoints )
44 {
45  //Point1(2) are running with every single fragment of the cryostat.
46  //Offset11(2) are increased with every new layer (lower, middle, upper, ...) of the cryostat
47  Int_t Offset3 = Offset1 +ShiftValue;
48  Int_t Offset4 = Offset2 +ShiftValue;
49  OutputArray[0]= CoordinatesInputArray[(Point2-1)* NumberOfPoints+2*Offset1];
50  OutputArray[1]= CoordinatesInputArray[(Point2-1)* NumberOfPoints+2*Offset1+1];
51  OutputArray[2]= CoordinatesInputArray[(Point2-1)* NumberOfPoints+2*Offset3];
52  OutputArray[3]= CoordinatesInputArray[(Point2-1)* NumberOfPoints+2*Offset3+1];
53  OutputArray[4]= CoordinatesInputArray[(Point1-1)* NumberOfPoints+2*Offset3];
54  OutputArray[5]= CoordinatesInputArray[(Point1-1)* NumberOfPoints+2*Offset3+1];
55  OutputArray[6]= CoordinatesInputArray[(Point1-1)* NumberOfPoints+2*Offset1];
56  OutputArray[7]= CoordinatesInputArray[(Point1-1)* NumberOfPoints+2*Offset1+1];
57  OutputArray[8]= CoordinatesInputArray[(Point2-1)* NumberOfPoints+2*Offset2];
58  OutputArray[9]= CoordinatesInputArray[(Point2-1)* NumberOfPoints+2*Offset2+1];
59  OutputArray[10]= CoordinatesInputArray[(Point2-1)* NumberOfPoints+2*Offset4];
60  OutputArray[11]= CoordinatesInputArray[(Point2-1)* NumberOfPoints+2*Offset4+1];
61  OutputArray[12]= CoordinatesInputArray[(Point1-1)* NumberOfPoints+2*Offset4];
62  OutputArray[13]= CoordinatesInputArray[(Point1-1)* NumberOfPoints+2*Offset4+1];
63  OutputArray[14]= CoordinatesInputArray[(Point1-1)* NumberOfPoints+2*Offset2];
64  OutputArray[15]= CoordinatesInputArray[(Point1-1)* NumberOfPoints+2*Offset2+1];
65 }
66 
67 void PndGeoHypGeBase::BuildTArb8Array(Double_t *OutputArray, Int_t Point1, Int_t Point2, Int_t Offset1, Int_t Offset2,Int_t Offset3, Int_t Offset4,Int_t NumberOfPoints )
68 {
69  OutputArray[0]= CoordinatesInputArray[(Point1-1)* NumberOfPoints+2*Offset1];
70  OutputArray[1]= CoordinatesInputArray[(Point1-1)* NumberOfPoints+2*Offset1+1];
71  OutputArray[2]= CoordinatesInputArray[(Point1-1)* NumberOfPoints+2*Offset3];
72  OutputArray[3]= CoordinatesInputArray[(Point1-1)* NumberOfPoints+2*Offset3+1];
73  OutputArray[4]= CoordinatesInputArray[(Point2-1)* NumberOfPoints+2*Offset3];
74  OutputArray[5]= CoordinatesInputArray[(Point2-1)* NumberOfPoints+2*Offset3+1];
75  OutputArray[6]= CoordinatesInputArray[(Point2-1)* NumberOfPoints+2*Offset1];
76  OutputArray[7]= CoordinatesInputArray[(Point2-1)* NumberOfPoints+2*Offset1+1];
77  OutputArray[8]= CoordinatesInputArray[(Point1-1)* NumberOfPoints+2*Offset2];
78  OutputArray[9]= CoordinatesInputArray[(Point1-1)* NumberOfPoints+2*Offset2+1];
79  OutputArray[10]= CoordinatesInputArray[(Point1-1)* NumberOfPoints+2*Offset4];
80  OutputArray[11]= CoordinatesInputArray[(Point1-1)* NumberOfPoints+2*Offset4+1];
81  OutputArray[12]= CoordinatesInputArray[(Point2-1)* NumberOfPoints+2*Offset4];
82  OutputArray[13]= CoordinatesInputArray[(Point2-1)* NumberOfPoints+2*Offset4+1];
83  OutputArray[14]= CoordinatesInputArray[(Point2-1)* NumberOfPoints+2*Offset2];
84  OutputArray[15]= CoordinatesInputArray[(Point2-1)* NumberOfPoints+2*Offset2+1];
85 }
86 
87 void PndGeoHypGeBase::BuildTArb8FrontArray(Double_t *OutputArray, Int_t Point1, Int_t Point2, Int_t Point3, Int_t Point4,Int_t NumberOfPoints)
88 {
89  OutputArray[0]= CoordinatesInputArray[(Point1-1)* NumberOfPoints];
90  OutputArray[1]= CoordinatesInputArray[(Point1-1)* NumberOfPoints+1];
91  OutputArray[2]= CoordinatesInputArray[(Point2-1)* NumberOfPoints];
92  OutputArray[3]= CoordinatesInputArray[(Point2-1)* NumberOfPoints+1];
93  OutputArray[4]= CoordinatesInputArray[(Point3-1)* NumberOfPoints];
94  OutputArray[5]= CoordinatesInputArray[(Point3-1)* NumberOfPoints+1];
95  OutputArray[6]= CoordinatesInputArray[(Point4-1)* NumberOfPoints];
96  OutputArray[7]= CoordinatesInputArray[(Point4-1)* NumberOfPoints+1];
97  OutputArray[8]= CoordinatesInputArray[(Point1-1)* NumberOfPoints+2];
98  OutputArray[9]= CoordinatesInputArray[(Point1-1)* NumberOfPoints+2+1];
99  OutputArray[10]= CoordinatesInputArray[(Point2-1)* NumberOfPoints+2];
100  OutputArray[11]= CoordinatesInputArray[(Point2-1)* NumberOfPoints+2+1];
101  OutputArray[12]= CoordinatesInputArray[(Point3-1)* NumberOfPoints+2];
102  OutputArray[13]= CoordinatesInputArray[(Point3-1)* NumberOfPoints+2+1];
103  OutputArray[14]= CoordinatesInputArray[(Point4-1)* NumberOfPoints+2];
104  OutputArray[15]= CoordinatesInputArray[(Point4-1)* NumberOfPoints+2+1];
105  //for( Int_t i = 0; i < 16; i++)
106  //cout << "Top_" << i <<": " << OutputArray[i] << endl;
107 }
108 
109 void PndGeoHypGeBase::BuildTArb8TopArray(Double_t *OutputArray, Int_t Point1, Int_t Point2, Int_t Point3, Int_t Point4, Int_t Offset,Int_t NumberOfPoints )
110 {
111  OutputArray[0]= CoordinatesInputArray[(Point1-1)* NumberOfPoints+2*Offset];
112  OutputArray[1]= CoordinatesInputArray[(Point1-1)* NumberOfPoints+2*Offset+1];
113  OutputArray[2]= CoordinatesInputArray[(Point2-1)* NumberOfPoints+2*Offset];
114  OutputArray[3]= CoordinatesInputArray[(Point2-1)* NumberOfPoints+2*Offset+1];
115  OutputArray[4]= CoordinatesInputArray[(Point3-1)* NumberOfPoints+2*Offset];
116  OutputArray[5]= CoordinatesInputArray[(Point3-1)* NumberOfPoints+2*Offset+1];
117  OutputArray[6]= CoordinatesInputArray[(Point4-1)* NumberOfPoints+2*Offset];
118  OutputArray[7]= CoordinatesInputArray[(Point4-1)* NumberOfPoints+2*Offset+1];
119  OutputArray[8]= CoordinatesInputArray[(Point1-1)* NumberOfPoints+2*Offset];
120  OutputArray[9]= CoordinatesInputArray[(Point1-1)* NumberOfPoints+2*Offset+1];
121  OutputArray[10]= CoordinatesInputArray[(Point2-1)* NumberOfPoints+2*Offset];
122  OutputArray[11]= CoordinatesInputArray[(Point2-1)* NumberOfPoints+2*Offset+1];
123  OutputArray[12]= CoordinatesInputArray[(Point3-1)* NumberOfPoints+2*Offset];
124  OutputArray[13]= CoordinatesInputArray[(Point3-1)* NumberOfPoints+2*Offset+1];
125  OutputArray[14]= CoordinatesInputArray[(Point4-1)* NumberOfPoints+2*Offset];
126  OutputArray[15]= CoordinatesInputArray[(Point4-1)* NumberOfPoints+2*Offset+1];
127  //for( Int_t i = 0; i < 16; i++)
128  // cout << "Top_" << i <<": " << OutputArray[i] << endl;
129 }
130 void PndGeoHypGeBase::FillInputArray(Int_t NumberOfPoints,Int_t NumberOfXYInput)
131 {
132  for (Int_t iPoint = 0; iPoint < NumberOfPoints;iPoint++)
133  {
134  if (!ParametersInputFile)
135  {
136  cout << "Inputfile does not exist!" << endl;
137  }
138  else if (ParametersInputFile.good())
139  {
140  string InputBuffer;
141  char* pEnd;
142  getline(ParametersInputFile,InputBuffer);
143  //cout << InputBuffer << endl;
144 
145  CoordinatesInputArray[iPoint*NumberOfXYInput] = strtod(InputBuffer.data(),&pEnd);
146  //cout << "Value_0" <<": " <<CoordinatesInputArray[iPoint*NumberOfXYInput] << endl;
147  for (Int_t iValues = 1; iValues < NumberOfXYInput; iValues++)
148  {
149  CoordinatesInputArray[iPoint*NumberOfXYInput+iValues] = strtod(pEnd,&pEnd);
150  //cout << "Value_" << iValues <<": " <<CoordinatesInputArray[iPoint*NumberOfXYInput+iValues] << endl;
151  }
152  }
153  }
154 }
155 
156 void PndGeoHypGeBase::FillZValues(Int_t NumberofDifferentZValues)
157 {
158  if (!ParametersInputFile)
159  {
160  cout << "Inputfile does not exist!" << endl;
161  }
162  else if (ParametersInputFile.good())
163  {
164  string InputBuffer;
165  char* pEnd;
166  getline(ParametersInputFile,InputBuffer);
167  //cout << InputBuffer << endl;
168 
169  ZValuesInputArray[0] = strtod(InputBuffer.data(),&pEnd);
170  //cout << "Value_0" <<": " <<ZValuesInputArray[0] << endl;
171  for (Int_t iValues = 1; iValues < NumberofDifferentZValues; iValues++)
172  {
173  ZValuesInputArray[iValues] = strtod(pEnd,&pEnd);
174  //cout << "Value_" << iValues <<": " <<ZValuesInputArray[iValues] << endl;
175  }
176  }
177 }
178 
179 void PndGeoHypGeBase::ReadCoordinatesAndAngles( string Filename,Int_t NumberOfCluster, Double_t *CoordinatesAndAngles)
180 {
181  string InputBuffer;
182  char* pEnd;
183  ifstream InputFile;
184  InputFile.open(Filename.data());
185  if (!InputFile)
186  {
187  cout << "Inputfile does not exist!" << endl;
188  }
189  else
190  {
191  cout << "Reading coordinates and angles from file" << endl;
192  for(Int_t iCluster = 0; iCluster < NumberOfCluster; iCluster++)
193  {
194  if (InputFile.good())
195  {
196 
197  getline(InputFile,InputBuffer);
198  //cout << InputBuffer << endl;
199  CoordinatesAndAngles[iCluster*6] = strtod(InputBuffer.data(),&pEnd);
200  //cout << "Value_0" <<": " <<CoordinatesAndAngles[iCluster*6] << endl;
201  for (Int_t iValues = 1; iValues < 6; iValues++)
202  {
203  CoordinatesAndAngles[iCluster*6+iValues] = strtod(pEnd,&pEnd);
204  //cout << "Value_" << iValues <<": " <<CoordinatesAndAngles[iCluster*6+iValues] << endl;
205  }
206  }
207  }
208  cout << "All read"<<endl;
209  }
210 }
void BuildTArb8Array(Double_t *OutputArray, Int_t Point1, Int_t Point2, Int_t Offset1, Int_t Offset2, Int_t ShiftValue, Int_t NumberOfPoints)
virtual ~PndGeoHypGeBase()
void BuildTArb8FrontArray(Double_t *OutputArray, Int_t Point1, Int_t Point2, Int_t Point3, Int_t Point4, Int_t NumberOfPoints)
void FillZValues(Int_t NumberofDifferentZValues)
ClassImp(PndGeoHypGeBase) PndGeoHypGeBase
Double_t
void BuildTArb8TopArray(Double_t *OutputArray, Int_t Point1, Int_t Point2, Int_t Point3, Int_t Point4, Int_t Offset, Int_t NumberOfPoints)
void FillInputArray(Int_t NumberOfPoints, Int_t NumberOfXYInput)
void ReadCoordinatesAndAngles(string Filename, Int_t NumberOfCluster, Double_t *CoordinatesAndAngles)