FairRoot/PandaRoot
PndMdtMuonFilter.cxx
Go to the documentation of this file.
1 
2 #include <iostream>
3 
4 #include "TClonesArray.h"
5 #include "TLorentzVector.h"
6 #include "TMath.h"
7 #include "TParticle.h"
8 #include "TGeoArb8.h"
9 #include "TGeoTrd2.h"
10 #include "TGeoCompositeShape.h"
11 #include "TGeoMatrix.h"
12 #include "TGeoManager.h"
13 #include "TVirtualMC.h"
14 
15 #include "FairVolume.h"
16 #include "FairGeoMedia.h"
17 #include "FairGeoInterface.h"
18 #include "FairGeoLoader.h"
19 #include "FairGeoBuilder.h"
20 #include "FairRuntimeDb.h"
21 #include "FairRun.h"
22 #include "FairModule.h"
23 
24 #include "PndDetectorList.h"
25 #include "PndStack.h"
26 #include "PndMdt.h"
27 #include "PndMdtMuonFilter.h"
28 
29 using namespace std;
30 
31 
33 {
34  TString vname = "Mdt";
35  vname = vname.Strip();
36  TGeoVolume* vcave = gGeoManager->FindVolumeFast(vname.Data());
37 
38 //General definitions
39  TGeoVolume* mdtmf = new TGeoVolumeAssembly("MdtMuonFilter");
40  TGeoVolume* mdtmfl00 = new TGeoVolumeAssembly("MdtMuonFilterLayer00");
41  TGeoVolume* mdtmfl01 = new TGeoVolumeAssembly("MdtMuonFilterLayer01");
42  TGeoVolume* mdtmfl02 = new TGeoVolumeAssembly("MdtMuonFilterLayer02");
43  TGeoVolume* mdtmfl03 = new TGeoVolumeAssembly("MdtMuonFilterLayer03");
44  TGeoVolume* mdtmfl04 = new TGeoVolumeAssembly("MdtMuonFilterLayer04");
45  TGeoVolume* mdtmfl05 = new TGeoVolumeAssembly("MdtMuonFilterLayer05");
46 
47 //Additional definitions
48  Text_t buffer[30];
49  Text_t longbuffer[250];
50  //Double_t mpx, mpy, mpz; //[R.K. 01/2017] unused variable?
51  //Double_t mx0, my0, //[R.K. 01/2017] unused variable?
52  Double_t mz0;
53  Double_t my;
54  //int k; //[R.K. 01/2017] unused variable?
55  Double_t dx1, dx2, dy1, dy2, dz;
56  TGeoRotation tRot, tRotSlice;
57  //Double_t angle; //[R.K. 01/2017] unused variable?
58 
59  FairGeoLoader*geoLoad = FairGeoLoader::Instance();
60  FairGeoInterface *geoFace = geoLoad->getGeoInterface();
61  FairGeoMedia *Media = geoFace->getMedia();
62  FairGeoBuilder *geobuild=geoLoad->getGeoBuilder();
63  FairGeoMedium *medmdtArCO2 = Media->getMedium("MDTMixture");
64  geobuild->createMedium(medmdtArCO2);
65 
66 //creating the holes
67  new TGeoBBox("mfhbox2",((Double_t)PndMdt_H07_H)/10.0,10.0+((Double_t)PndMdt_SVThickness)/10.0,((Double_t)PndMdt_H07_V)/10.0,0);
68  new TGeoBBox("mfhbox3",((Double_t)PndMdt_H08_H)/10.0,10.0+((Double_t)PndMdt_SVThickness)/10.0,((Double_t)PndMdt_H08_V)/10.0,0);
69  new TGeoBBox("mfhbox4",((Double_t)PndMdt_H09_H)/10.0,10.0+((Double_t)PndMdt_SVThickness)/10.0,((Double_t)PndMdt_H09_V)/10.0,0);
70  new TGeoBBox("mfhbox5",((Double_t)PndMdt_H10_H)/10.0,10.0+((Double_t)PndMdt_SVThickness)/10.0,((Double_t)PndMdt_H10_V)/10.0,0);
71  new TGeoBBox("mfhbox6",((Double_t)PndMdt_H11_H)/10.0,10.0+((Double_t)PndMdt_SVThickness)/10.0,((Double_t)PndMdt_H11_V)/10.0,0);
72  new TGeoBBox("mfhbox7",((Double_t)PndMdt_H12_H)/10.0,10.0+((Double_t)PndMdt_SVThickness)/10.0,((Double_t)PndMdt_H12_V)/10.0,0);
73  new TGeoBBox("mfhboxpmp2",((Double_t)PndMdt_PUMP_H)/10.0,10.0+((Double_t)PndMdt_SVThickness)/10.0,((Double_t)PndMdt_PUMP_V)/10.0,0);
74  new TGeoBBox("mfhboxpmp3",((Double_t)PndMdt_PUMP_H)/10.0,10.0+((Double_t)PndMdt_SVThickness)/10.0,((Double_t)PndMdt_PUMP_V)/10.0,0);
75  new TGeoBBox("mfhboxpmp4",((Double_t)PndMdt_PUMP_H)/10.0,10.0+((Double_t)PndMdt_SVThickness)/10.0,((Double_t)PndMdt_PUMP_V)/10.0,0);
76  new TGeoBBox("mfhboxpmp5",((Double_t)PndMdt_PUMP_H)/10.0,10.0+((Double_t)PndMdt_SVThickness)/10.0,((Double_t)PndMdt_PUMP_V)/10.0,0);
77  new TGeoBBox("mfhboxpmp6",((Double_t)PndMdt_PUMP_H)/10.0,10.0+((Double_t)PndMdt_SVThickness)/10.0,((Double_t)PndMdt_PUMP_V)/10.0,0);
78  new TGeoBBox("mfhboxpmp7",((Double_t)PndMdt_PUMP_H)/10.0,10.0+((Double_t)PndMdt_SVThickness)/10.0,((Double_t)PndMdt_PUMP_V)/10.0,0);
79 
80 
81 //MdtMF
82  tRot.RotateX(90.0);
83  TGeoRotation mftgrl;
84  mftgrl.RotateY(0.0);
85  TGeoRotation* mftgr0 = new TGeoRotation(mftgrl);
86  mftgr0->SetName("mftgr0");
87  mftgr0->RegisterYourself();
88  mftgrl.RotateY(45.0);
89  TGeoRotation* mftgr1 = new TGeoRotation(mftgrl);
90  mftgr1->SetName("mftgr1");
91  mftgr1->RegisterYourself();
92  mftgrl.RotateY(45.0);
93  TGeoRotation* mftgr2 = new TGeoRotation(mftgrl);
94  mftgr2->SetName("mftgr2");
95  mftgr2->RegisterYourself();
96  mftgrl.RotateY(45.0);
97  TGeoRotation* mftgr3 = new TGeoRotation(mftgrl);
98  mftgr3->SetName("mftgr3");
99  mftgr3->RegisterYourself();
100  mftgrl.RotateY(45.0);
101  TGeoRotation* mftgr4 = new TGeoRotation(mftgrl);
102  mftgr4->SetName("mftgr4");
103  mftgr4->RegisterYourself();
104  mftgrl.RotateY(45.0);
105  TGeoRotation* mftgr5 = new TGeoRotation(mftgrl);
106  mftgr5->SetName("mftgr5");
107  mftgr5->RegisterYourself();
108  mftgrl.RotateY(45.0);
109  TGeoRotation* mftgr6 = new TGeoRotation(mftgrl);
110  mftgr6->SetName("mftgr6");
111  mftgr6->RegisterYourself();
112  mftgrl.RotateY(45.0);
113  TGeoRotation* mftgr7 = new TGeoRotation(mftgrl);
114  mftgr7->SetName("mftgr7");
115  mftgr7->RegisterYourself();
116 
117  dx2 = 0.0;
118  dy1 = (Double_t)PndMdt_SVThickness;
119  dy2 = (Double_t)PndMdt_SVThickness;
120  dx1 = ((Double_t)PndMdt_MF_Height)*(TMath::Tan(TMath::ACos(-1.0)/8.0));
121  my = ((Double_t)PndMdt_MF_Height)/2.0;
122  dz = ((Double_t)PndMdt_MF_Height)/2.0;
123  TGeoTranslation* mftgt = new TGeoTranslation(0.0,0.0,my/(-10.0));
124  mftgt->SetName("mftgt");
125  mftgt->RegisterYourself();
126  new TGeoTrd2("mftrd",dx1/10.0,dx2/10.0,dy1/10.0,dy2/10.0,dz/10.0);
127 
128  for(int i=0; i<6; i++)
129  {
130  switch(i)
131  {
132  case 0:
133  mz0 = (Double_t)PndMdt_SV300;
134  break;
135  case 1:
136  mz0 = (Double_t)PndMdt_SV301;
137  break;
138  case 2:
139  mz0 = (Double_t)PndMdt_SV302;
140  break;
141  case 3:
142  mz0 = (Double_t)PndMdt_SV303;
143  break;
144  case 4:
145  mz0 = (Double_t)PndMdt_SV304;
146  break;
147  case 5:
148  mz0 = (Double_t)PndMdt_SV305;
149  break;
150  };
151  for(int j=0; j<8; j++)
152  {
153  sprintf(buffer,"mftgcs%i",(8*i)+j);
154  sprintf(longbuffer,"mftrd:mftgt-mfhbox%i:mftgr%i-mfhboxpmp%i:mftgr%i",i+2,j,i+2,j);
155  TGeoCompositeShape* mftgcs = new TGeoCompositeShape(buffer,longbuffer);
156  //sprintf(buffer,"muon%i",300+8*i+j);
157  sprintf(buffer,"MDT%is%il%ib%iw%i", 3, j, i, 0, 0);
158  TGeoVolume* volume = new TGeoVolume(buffer,mftgcs,gGeoManager->GetMedium("MDTMixture"));
159  AddSensitiveVolume(volume);
160  volume->SetLineColor(1);
161 // mdtmf->AddNode(volume,300+8*i+j,new TGeoCombiTrans(0.0,0.0,mz0/10.0,new TGeoRotation(tRot)));
162  switch(i)
163  {
164  case 0:
165  mdtmfl00->AddNode(volume,300+8*i+j,new TGeoCombiTrans(0.0,0.0,mz0/10.0,new TGeoRotation(tRot)));
166  break;
167  case 1:
168  mdtmfl01->AddNode(volume,300+8*i+j,new TGeoCombiTrans(0.0,0.0,mz0/10.0,new TGeoRotation(tRot)));
169  break;
170  case 2:
171  mdtmfl02->AddNode(volume,300+8*i+j,new TGeoCombiTrans(0.0,0.0,mz0/10.0,new TGeoRotation(tRot)));
172  break;
173  case 3:
174  mdtmfl03->AddNode(volume,300+8*i+j,new TGeoCombiTrans(0.0,0.0,mz0/10.0,new TGeoRotation(tRot)));
175  break;
176  case 4:
177  mdtmfl04->AddNode(volume,300+8*i+j,new TGeoCombiTrans(0.0,0.0,mz0/10.0,new TGeoRotation(tRot)));
178  break;
179  case 5:
180  mdtmfl05->AddNode(volume,300+8*i+j,new TGeoCombiTrans(0.0,0.0,mz0/10.0,new TGeoRotation(tRot)));
181  break;
182  };
183  tRot.RotateZ(-45.0);
184  };
185  };
186 
187  mdtmf->AddNode(mdtmfl00,1);
188  mdtmf->AddNode(mdtmfl01,1);
189  mdtmf->AddNode(mdtmfl02,1);
190  mdtmf->AddNode(mdtmfl03,1);
191  mdtmf->AddNode(mdtmfl04,1);
192  mdtmf->AddNode(mdtmfl05,1);
193  vcave->AddNode(mdtmf,1);
194 
195  return;
196 }
197 
#define PndMdt_PUMP_V
#define PndMdt_SVThickness
Definition: PndMdtForward.h:23
FairGeoLoader * geoLoad
Int_t i
Definition: run_full.C:25
FairGeoMedia * Media
#define PndMdt_SV303
#define PndMdt_H10_H
float Tan(float x)
Definition: PndCAMath.h:165
#define PndMdt_H07_H
#define PndMdt_SV300
TGeoManager * gGeoManager
#define PndMdt_H12_H
#define PndMdt_H08_H
#define PndMdt_H12_V
#define PndMdt_SV304
#define PndMdt_H09_H
FairGeoBuilder * geobuild
Double_t
#define PndMdt_SV305
#define PndMdt_H08_V
#define PndMdt_H11_H
Definition: PndMdt.h:20
ClassImp(PndAnaContFact)
#define PndMdt_H09_V
#define PndMdt_H10_V
FairGeoInterface * geoFace
#define PndMdt_SV301
#define PndMdt_PUMP_H
#define PndMdt_H07_V
void PndMdtMuonFilter()
#define PndMdt_MF_Height
#define PndMdt_H11_V
#define PndMdt_SV302