FairRoot/PandaRoot
Functions | Variables
hypGeGeoCOSYsetup2014.C File Reference
#include "TGeoManager.h"

Go to the source code of this file.

Functions

TString BuildOutputNameTarget (Double_t TargetThickness_Ext, Double_t Angle)
 
TGeoShape * makeMaytec (Double_t length, TString Name)
 
TGeoVolume * makeMaytecFrame (TGeoMedium *Med_ext)
 
TGeoVolume * makeGlueStackFrame (TGeoMedium *Al_ext, TGeoMedium *Steel_ext)
 
TGeoVolume * makeGlueSample (TGeoMedium *Al_ext, TGeoMedium *Glue_ext, Int_t SampleNumber, Bool_t PassivePart, Bool_t ActivePart)
 
TString hypGeGeoCOSYsetup2014 ()
 

Variables

double Pi = TMath::Pi()
 

Function Documentation

TString BuildOutputNameTarget ( Double_t  TargetThickness_Ext,
Double_t  Angle 
)

Definition at line 9 of file hypGeGeoCOSYsetup2014.C.

References TString.

Referenced by hypGeGeoCOSYTarget(), and sim_hypGe_COSY().

10 {
11  TString outfileWithoutPath = "hypGeGeoCOSYTarget_";
12  //char buf[10];
13  //sprintf(buf,"%.2f",TargetThickness_Ext);
14  //outfileWithoutPath += buf;
15  outfileWithoutPath +=TargetThickness_Ext;
16  //outfileWithoutPath +=
17  outfileWithoutPath += "cm_";
18  outfileWithoutPath += Angle;
19  outfileWithoutPath += "_Degree.root";
20  return outfileWithoutPath;
21 }
TString hypGeGeoCOSYsetup2014 ( )

Definition at line 220 of file hypGeGeoCOSYsetup2014.C.

References CAMath::Cos(), Cu, Double_t, fi, geobuild, geoFace, geoLoad, geom(), gGeoManager, i, makeGlueSample(), makeGlueStackFrame(), makeMaytecFrame(), Media, outfile, Pi, PndGeoHypGeCluster::PlaceCluster(), RegisterYourself(), CAMath::Sin(), Target, top, and TString.

221 {
222  // macro to build the setup of the june and july 2014 hypGe beamtime at COSY
223 
224 
225  // the name of all "active parts" has to start with "Crystal" if the simulation with the hypGe package should work (steinen, 25.8.14)
226 
227  bool AddActives = 1;
228  bool AddPassives = 1;
229  bool GlueStackOnly = 0;
230  bool ElectronicsStackOnly = 0;
231  bool isJune = 1; // "0" = july beam time, detector was a bit further away (15 cm -> 17 cm)
232 
233  if (isJune)
234  Double_t GeDistance = 15;
235  else
236  Double_t GeDistance = 17;
237 
238 
239  Double_t OffsetToAlPlate = -4.2;
240  gROOT->Macro("$VMCWORKDIR/gconfig/rootlogon.C");
241 
242  // Load this libraries
243  gSystem->Load("libGeoBase");
244  gSystem->Load("libParBase");
245  gSystem->Load("libBase");
246  gSystem->Load("libPndData");
247  gSystem->Load("libPassive");
248  gSystem->Load("libHypGe");
249 
250 
251 
252 
253  FairGeoLoader* geoLoad = new FairGeoLoader("TGeo","FairGeoLoader");
254  FairGeoInterface *geoFace = geoLoad->getGeoInterface();
255  geoFace->setMediaFile("../../../../geometry/media_pnd.geo");
256  geoFace->readMedia();
257  //geoFace->print();
258 
259  FairGeoMedia *Media = geoFace->getMedia();
260  FairGeoBuilder *geobuild=geoLoad->getGeoBuilder();
261 
262  FairGeoMedium *medcarbon = Media->getMedium("carbon");
263  Int_t nmedcap=geobuild->createMedium(medcarbon);
264  TGeoMedium *Carbon = gGeoManager->GetMedium("carbon");
265 
266  FairGeoMedium *medcap = Media->getMedium("HYPaluminium");
267  Int_t nmedcap=geobuild->createMedium(medcap);
268  TGeoMedium *Al = gGeoManager->GetMedium("HYPaluminium");
269 
270  FairGeoMedium *medGe = Media->getMedium("germanium");
271  Int_t nmedGe=geobuild->createMedium(medGe);
272  TGeoMedium *Ge = gGeoManager->GetMedium("germanium");
273 
274  FairGeoMedium *medsteel = Media->getMedium("steel");
275  Int_t nmedcap=geobuild->createMedium(medsteel);
276  TGeoMedium *Steel = gGeoManager->GetMedium("steel");
277 
278  FairGeoMedium *medcu = Media->getMedium("copper");
279  Int_t nmedcap=geobuild->createMedium(medcu);
280  TGeoMedium *Cu = gGeoManager->GetMedium("copper");
281 
282  FairGeoMedium *medpe_bor5 = Media->getMedium("pe_bor5");
283  Int_t nmedcap=geobuild->createMedium(medpe_bor5);
284  TGeoMedium *pe_bor5 = gGeoManager->GetMedium("pe_bor5"); // polyethylen with 5 % boronoxide
285 
286  FairGeoMedium *medacrylicGlass = Media->getMedium("acrylicGlass");
287  Int_t nmedcap=geobuild->createMedium(medacrylicGlass);
288  TGeoMedium *acrylicGlass = gGeoManager->GetMedium("acrylicGlass");
289 
290 
291  TGeoManager *geom = (TGeoManager*)gROOT->FindObject("FAIRGeom");
292  TGeoVolume *top = new TGeoVolumeAssembly("hpGe");
293  TGeoVolume *PassivesTop = new TGeoVolumeAssembly("PassivesTop");
294  TGeoVolume *ActivesTop = new TGeoVolumeAssembly("ActivesTop");
295 
296 //cout<<" geom "<<geom<<endl;
297  geom->SetTopVolume(top);
298 
299  // carbon target
300 
301  Double_t TargetThickness = 5;
302  Double_t Angle = 0;
303 
304  TGeoVolume *TargetAssembly = new TGeoVolumeAssembly("TargetAssembly");
305  TGeoVolume* Target = geom->MakeBox("Target",Carbon,2.4,2.4,TargetThickness/2);
306  Target->SetLineColor(kRed);
307  Target->SetFillColor(kRed);
308  TGeoRotation *TargetRot = new TGeoRotation("TargetRot",0,Angle,0);
309  TargetRot->RegisterYourself();
310  TargetAssembly->AddNode(Target,0,new TGeoCombiTrans("",0,0,TargetThickness/2/TMath::Cos(Angle*Pi/180),TargetRot));
311 
312  TGeoVolume* TargetAddition = geom->MakeBox("TargetAddition",Carbon,0.5,2.4,2.4);
313  TargetAddition->SetLineColor(kRed);
314  TargetAddition->SetFillColor(kRed);
315  TargetAssembly->AddNode(TargetAddition,1,new TGeoCombiTrans(-2.9,0,-0.1+TargetThickness/2/TMath::Cos(Angle*Pi/180),TargetRot));
316  TargetAssembly->AddNode(TargetAddition,2,new TGeoCombiTrans(-3.9,0,-0.1+TargetThickness/2/TMath::Cos(Angle*Pi/180),TargetRot));
317 
318  if (!GlueStackOnly && !ElectronicsStackOnly ) PassivesTop->AddNode(TargetAssembly,0);
319 
320 
321  // Al support of germanium setup: target holder, alu plate, maytec frame
322  TGeoVolume *AlSupportAssembly = new TGeoVolumeAssembly("AlSupportAssembly");
323  // target holder
324  // plate under target
325  TGeoTube *AlPlateTube = new TGeoTube("AlPlateTube",0,6,0.2);
326  TGeoRotation *AlPlateTubeRotation = new TGeoRotation ("AlPlateTubeRotation",90,90,0);
327  AlPlateTubeRotation->RegisterYourself();
328  TGeoBBox *AlPlateBox = new TGeoBBox("AlPlateBox",0.2,6,11.6/2);
329  TGeoTranslation *AlPlateBoxTranslation = new TGeoTranslation ("AlPlateBoxTranslation",0,0,+5.8);
330  AlPlateBoxTranslation->RegisterYourself();
331  TGeoCompositeShape *AlPlateShape = new TGeoCompositeShape("AlPlateShape", "AlPlateTube : AlPlateTubeRotation + AlPlateBox : AlPlateBoxTranslation");
332  TGeoVolume *AlPlate = new TGeoVolume("AlPlate", AlPlateShape, Al);
333  AlPlate->SetLineColor(14);
334  AlPlate->SetFillColor(14);
335 
336  // angle bracket in front of target
337  TGeoBBox *AlFrontAngleTop = new TGeoBBox("AlFrontAngleTop",0.5,2.5,0.1);
338  TGeoTranslation *AlFrontAngleTopTranslation = new TGeoTranslation ("AlFrontAngleTopTranslation",+0.2+0.5,0,-0.1);
339  AlFrontAngleTopTranslation->RegisterYourself();
340  TGeoBBox *AlFrontAngleBottom = new TGeoBBox("AlFrontAngleBottom",0.1,2.5,1.5);
341  TGeoTranslation *AlFrontAngleBottomTranslation = new TGeoTranslation ("AlFrontAngleBottomTranslation",+0.3,0,-1.5);
342  AlFrontAngleBottomTranslation->RegisterYourself();
343  TGeoBBox *AlFrontAngleBottomCutout = new TGeoBBox("AlFrontAngleBottomCutout",1,0.25,1.5);
344  TGeoTranslation *AlFrontAngleBottomCutoutTranslation = new TGeoTranslation ("AlFrontAngleBottomCutoutTranslation",+0.3,0,-2.5);
345  AlFrontAngleBottomCutoutTranslation->RegisterYourself();
346  TGeoCompositeShape *AlFrontAngleShape = new TGeoCompositeShape("AlFrontAngleShape", "(AlFrontAngleTop : AlFrontAngleTopTranslation + AlFrontAngleBottom : AlFrontAngleBottomTranslation ) - ( AlFrontAngleBottomCutout : AlFrontAngleBottomCutoutTranslation)");
347  TGeoVolume *AlFrontAngle = new TGeoVolume("AlFrontAngle", AlFrontAngleShape, Al);
348  AlFrontAngle ->SetLineColor(14);
349  AlFrontAngle ->SetFillColor(14);
350 
351  // angle bracket in the back of target
352  TGeoBBox *AlBackAngleTop = new TGeoBBox("AlBackAngleTop",0.5,2.5,0.1);
353  TGeoTranslation *AlBackAngleTopTranslation = new TGeoTranslation ("AlBackAngleTopTranslation",+0.2+0.5,0,4.9);
354  AlBackAngleTopTranslation->RegisterYourself();
355  TGeoBBox *AlBackAngleBottom = new TGeoBBox("AlBackAngleBottom",0.1,2.5,5);
356  TGeoTranslation *AlBackAngleBottomTranslation = new TGeoTranslation ("AlBackAngleBottomTranslation",+0.3,0,4.8+5);
357  AlBackAngleBottomTranslation->RegisterYourself();
358  TGeoBBox *AlBackAngleBottomCutout = new TGeoBBox("AlBackAngleBottomCutout",1,0.25,5);
359  TGeoTranslation *AlBackAngleBottomCutoutTranslation = new TGeoTranslation ("AlBackAngleBottomCutoutTranslation",+0.3,0,4.8+7);
360  AlBackAngleBottomCutoutTranslation->RegisterYourself();
361  TGeoCompositeShape *AlBackAngleShape = new TGeoCompositeShape("AlBackAngleShape", "(AlBackAngleTop : AlBackAngleTopTranslation + AlBackAngleBottom : AlBackAngleBottomTranslation ) - ( AlBackAngleBottomCutout : AlBackAngleBottomCutoutTranslation)");
362  TGeoVolume *AlBackAngle = new TGeoVolume("AlBackAngle", AlBackAngleShape, Al);
363  AlBackAngle ->SetLineColor(14);
364  AlBackAngle ->SetFillColor(14);
365 
366  // add Al goniometer
367  TGeoTube *AlGoniometerTube = new TGeoTube("AlGoniometerTube",5,6,2);
368  TGeoCombiTrans *AlGoniometerTubeCombiTrans = new TGeoCombiTrans ("AlGoniometerTubeCombiTrans",-2.2,0,0, new TGeoRotation("",90,90,0));
369  AlGoniometerTubeCombiTrans->RegisterYourself();
370  TGeoVolume *AlGoniometer = new TGeoVolume("AlGoniometer",AlGoniometerTube,Al);
371  AlGoniometer ->SetLineColor(14);
372  AlGoniometer ->SetFillColor(14);
373 
374  //screw head close to the beam
375 
376  TGeoTube *M5ScrewHeadOut = new TGeoTube("M5ScrewHeadOut",0.45/2,0.4,0.25);
377  TGeoTube *M5ScrewHeadIn = new TGeoTube("M5ScrewHeadIn",0,0.45/2,0.25/2);
378  TGeoTranslation *M5ScrewHeadInTrans = new TGeoTranslation("M5ScrewHeadInTrans",0,0,0.25/2);
379  M5ScrewHeadInTrans -> RegisterYourself();
380  TGeoCompositeShape *M5ScrewHeadShape = new TGeoCompositeShape("M5SrewHeadShape","M5ScrewHeadOut + M5ScrewHeadIn : M5ScrewHeadInTrans");
381  TGeoVolume *M5ScrewHead = new TGeoVolume("M5ScrewHead",M5ScrewHeadShape,Steel);
382  TGeoCombiTrans *M5ScrewHeadCombiTrans = new TGeoCombiTrans ("M5ScrewHeadCombiTrans",+0.4+0.25,0,8, new TGeoRotation("",90,270,0));
383  M5ScrewHeadCombiTrans->RegisterYourself();
384  TGeoCombiTrans *M5ScrewHead2CombiTrans = new TGeoCombiTrans ("M5ScrewHead2CombiTrans",+0.4+0.25,0,-2, new TGeoRotation("",90,270,0));
385  M5ScrewHead2CombiTrans->RegisterYourself();
386  M5ScrewHead->SetLineColor(36);
387  M5ScrewHead->SetFillColor(36);
388 
389  AlSupportAssembly->AddNode(M5ScrewHead,1, M5ScrewHeadCombiTrans);
390  AlSupportAssembly->AddNode(M5ScrewHead,2, M5ScrewHead2CombiTrans);
391 
392  // add Al base plate
393 
394  TGeoBBox *AlBasePlateBox = new TGeoBBox("AlBasePlateBox",0.4,30,40);
395  TGeoCombiTrans *AlBasePlateCombiTrans = new TGeoCombiTrans ("AlBasePlateCombiTrans",-4.6,25,-25, new TGeoRotation("",0,60,0));
396  AlBasePlateCombiTrans->RegisterYourself();
397  TGeoVolume *AlBasePlate = new TGeoVolume("AlBasePlate",AlBasePlateBox,Al);
398  AlBasePlate ->SetLineColor(14);
399  AlBasePlate ->SetFillColor(14);
400 
401  // add all Al parts to assembly
402  AlSupportAssembly->AddNode(AlBasePlate,1, AlBasePlateCombiTrans);
403  AlSupportAssembly->AddNode(AlGoniometer,1, AlGoniometerTubeCombiTrans);
404  AlSupportAssembly->AddNode(AlFrontAngle,1);
405  AlSupportAssembly->AddNode(AlBackAngle,1);
406  AlSupportAssembly->AddNode(AlPlate,1);
407 
408  TGeoVolume *Frame = makeMaytecFrame(Al);
409  AlSupportAssembly ->AddNode(Frame,1, new TGeoCombiTrans(OffsetToAlPlate,15*TMath::Sin(TMath::Pi()/180*60),-15*TMath::Cos(TMath::Pi()/180*60), new TGeoRotation("",0,-30,0)));
410 
411  if (!GlueStackOnly && !ElectronicsStackOnly ) PassivesTop->AddNode(AlSupportAssembly,1, new TGeoTranslation (-4.6,0,0));
412 
413  //plastic blocks under the Al plate
414 
415  TGeoBBox *PlasticBlockBox = new TGeoBBox("PlasticBlockBox",5,6,10);
416  TGeoVolume *PlasticBlock = new TGeoVolume ("PlasticBlock", PlasticBlockBox,acrylicGlass);
417  TGeoVolume *PlasticBlock2 = new TGeoVolume ("PlasticBlock2", PlasticBlockBox,acrylicGlass);
418 
419  PlasticBlock->SetFillColor(kBlue+4);
420  PlasticBlock->SetLineColor(kBlue+4);
421  PlasticBlock2->SetFillColor(kBlue+4);
422  PlasticBlock2->SetLineColor(kBlue+4);
423 
424  TGeoCombiTrans *PlasticBlock1Trans = new TGeoCombiTrans ("PlasticBlock1Trans",OffsetToAlPlate-4.6-0.8-5,-24*TMath::Cos(TMath::Pi()/180*60)-30*TMath::Sin(TMath::Pi()/180*60)+25,-24*TMath::Sin(TMath::Pi()/180*60)+30*TMath::Cos(TMath::Pi()/180*60)-25, new TGeoRotation("",0,60,0));
425  PlasticBlock1Trans->RegisterYourself();
426  TGeoCombiTrans *PlasticBlock2Trans = new TGeoCombiTrans ("PlasticBlock2Trans",OffsetToAlPlate-4.6-0.8-5,24*TMath::Cos(TMath::Pi()/180*60)-30*TMath::Sin(TMath::Pi()/180*60)+25,24*TMath::Sin(TMath::Pi()/180*60)+30*TMath::Cos(TMath::Pi()/180*60)-25 , new TGeoRotation("",0,60,0));
427  PlasticBlock2Trans->RegisterYourself();
428  if (!GlueStackOnly && !ElectronicsStackOnly ) PassivesTop->AddNode (PlasticBlock,0,PlasticBlock1Trans);
429  if (!GlueStackOnly && !ElectronicsStackOnly ) PassivesTop->AddNode (PlasticBlock2,0,PlasticBlock2Trans);
430 
431 
432  // neutron detectors
433 
434 
435  TGeoVolume *NeutronDetectorAssembly = new TGeoVolumeAssembly("NeutronDetectorAssembly");
436  // electronic neutron dosimeter (Kermit)
437  TGeoTube *KermitTube= new TGeoTube("KermitTube",0,23.5/2,26.4/2);
438  TGeoVolume *KermitVolume = new TGeoVolume("CrystalKermit",KermitTube,pe_bor5);
439  KermitVolume->SetFillColor(19);
440  KermitVolume->SetLineColor(19);
441  TGeoCombiTrans *KermitCombiTrans = new TGeoCombiTrans ("KermitHeadCombiTrans",24.5+23.5/2+OffsetToAlPlate,15+(26.4/2)*TMath::Sin(TMath::Pi()/180*60),-(15+26.4/2)*TMath::Cos(TMath::Pi()/180*60), new TGeoRotation("",0,60,0));
442  KermitCombiTrans->RegisterYourself();
443  NeutronDetectorAssembly ->AddNode(KermitVolume,2000, KermitCombiTrans); // check x position of kermit, seems too high, but need better connection for this...
444 
445  // passive neutron ball
446  TGeoSphere *NeutronBallSphere = new TGeoSphere("NeutronBallSphere",0,32/2,0,180,0,360);
447  TGeoVolume *NeutronBall = new TGeoVolume ("CrystalNeutronBall", NeutronBallSphere,pe_bor5);
448  NeutronBall->SetFillColor(12);
449  NeutronBall->SetLineColor(12);
450  TGeoCombiTrans *NeutronBallCombiTrans = new TGeoCombiTrans ("NeutronBallHeadCombiTrans",20+OffsetToAlPlate,21.5+32/2,-54, new TGeoRotation("",0,0,0));
451  NeutronBallCombiTrans->RegisterYourself();
452  NeutronDetectorAssembly ->AddNode(NeutronBall,2001, NeutronBallCombiTrans);
453 
454  if (!GlueStackOnly && !ElectronicsStackOnly ) ActivesTop->AddNode(NeutronDetectorAssembly,1, new TGeoTranslation (-4.6,0,0));
455 
456  //germanium
457 
458  PndGeoHypGeSingleCluster *SingleCluster = new PndGeoHypGeSingleCluster(Ge,Al,Cu,1);
459  Int_t CrystalNumber = 1;
460  if (!GlueStackOnly && !ElectronicsStackOnly ) SingleCluster ->PlaceCluster(ActivesTop, 0,GeDistance, 0,60,0,&CrystalNumber);
461 
462  // piezos
463  TGeoVolume* Piezo = geom->MakeBox("CrystalPiezo1",acrylicGlass,0.75,0.25,0.2);
464  TGeoVolume* Piezo2 = geom->MakeBox("CrystalPiezo2",acrylicGlass,0.75,0.25,0.2);
465  Piezo->SetLineColor(kBlue);
466  Piezo->SetFillColor(kBlue);
467  if (!GlueStackOnly && !ElectronicsStackOnly ) ActivesTop->AddNode(Piezo,1000,new TGeoCombiTrans(-1,0,5.2,new TGeoRotation("",90,0,0)));
468  Piezo2->SetLineColor(kBlue);
469  Piezo2->SetFillColor(kBlue);
470  if (!GlueStackOnly && !ElectronicsStackOnly ) ActivesTop->AddNode(Piezo2,1001,new TGeoCombiTrans(1,0,5.2,new TGeoRotation("",90,0,0)));
471 
472  // stack of glue samples
473  // first the frame
474 
475  TGeoVolume *GlueStackAssemblyActive = new TGeoVolumeAssembly("GlueStackAssemblyActive");
476  TGeoVolume *GlueStackAssemblyPassive = new TGeoVolumeAssembly("GlueStackAssemblyPassive");
477  TGeoVolume *GlueStackFrame = makeGlueStackFrame(Al,acrylicGlass);
478 
479  GlueStackAssemblyPassive->AddNode(GlueStackFrame,1);
480 
481  TGeoVolume *GlueSamplesActive[23];
482  TGeoVolume *GlueSamplesPassive[23];
483  //TGeoCombiTrans GlueSampleTrans[23];
484 
485  for (int i= 0; i < 23; i++)
486  {
487  GlueSamplesActive[i] = makeGlueSample(Al, Steel,i, 0, 1);
488  GlueSamplesPassive[i] = makeGlueSample(Al, Steel,i, 1, 0);
489  //GlueSampleTrans[i] = new TGeoCombiTrans (0,0,0.4 + i*(1), new TGeoRotation(0,0,0));
490  GlueStackAssemblyActive->AddNode(GlueSamplesActive[i],i, new TGeoCombiTrans (0,0,-(0.4 + i*(0.203)), new TGeoRotation("",i*90,0,0)));
491  GlueStackAssemblyPassive->AddNode(GlueSamplesPassive[i],i, new TGeoCombiTrans (0,0,-(0.4 + i*(0.203)), new TGeoRotation("",i*90,0,0)));
492  }
493  //if ( !ElectronicsStackOnly ) ActivesTop->AddNode(GlueStackAssemblyActive,1, new TGeoCombiTrans (0,0,100, new TGeoRotation("",0,180,0)));
494  //if ( !ElectronicsStackOnly ) PassivesTop->AddNode(GlueStackAssemblyPassive,1, new TGeoCombiTrans (0,0,100, new TGeoRotation("",0,180,0)));
495 
496  if (AddActives) top->AddNode(ActivesTop,0);
497  if (AddPassives) top->AddNode(PassivesTop,0);
498 
499  geom->CheckOverlaps();
500  geom->CloseGeometry();
501  cout << "# of Nodes: " << PassivesTop->CountNodes(10,1) << endl;
502 
503 
504 
505  // file with passive parts
506  TString outfileWithoutPath ="hypGeGeoCOSY2014setupPassives.root";//BuildOutputNameTarget(TargetThickness_Ext, Angle); //"hypGeGeoCOSYTarget_";
507  TString outfile= "../../../../geometry/";
508  outfile += outfileWithoutPath;
509 
510  cout << outfile << endl;
511  PassivesTop->PrintNodes();
512  ActivesTop->ls();
513 
514  TFile* fi = new TFile(outfile,"RECREATE");
515  TGeoVolume *PassivesTopWrap = new TGeoVolumeAssembly("PassivesTopWrap");
516  PassivesTopWrap->AddNode(PassivesTop,0);
517  PassivesTopWrap->Write();
518  fi->Close();
519  cout << "Wrote passives geometry to file: " << outfileWithoutPath << endl;
520 
521  // file with active parts
522  outfileWithoutPath ="hypGeGeoCOSY2014setupActives.root";
523  outfile= "../../../../geometry/";
524  outfile += outfileWithoutPath;
525 
526  cout << outfile << endl;
527  fi->Open(outfile,"RECREATE");
528 
529  TGeoVolume *ActivesTopWrap = new TGeoVolumeAssembly("ActivesTopWrap");
530  ActivesTopWrap->AddNode(ActivesTop,0);
531  ActivesTopWrap->Write();
532  fi->Close();
533 
534  top->Draw("ogl");
535  //PassivesTop->Draw("");
536 
537 
538 
539 
540 
541 
542  return outfileWithoutPath; // returns the name of the created geometry file
543 }
FairGeoLoader * geoLoad
Int_t i
Definition: run_full.C:25
FairGeoMedia * Media
static T Sin(const T &x)
Definition: PndCAMath.h:42
TFile * Target
Definition: hadd.C:35
trDW RegisterYourself()
TGeoManager * gGeoManager
static T Cos(const T &x)
Definition: PndCAMath.h:43
TGeoVolume * top
TGeoVolume * makeMaytecFrame(TGeoMedium *Med_ext)
FairGeoBuilder * geobuild
TFile * fi
Double_t
#define Cu
TGeoVolume * makeGlueStackFrame(TGeoMedium *Al_ext, TGeoMedium *Steel_ext)
TGeoVolume * makeGlueSample(TGeoMedium *Al_ext, TGeoMedium *Glue_ext, Int_t SampleNumber, Bool_t PassivePart, Bool_t ActivePart)
void PlaceCluster(TGeoVolume *top, TGeoMatrix *ClusterPlaceAndDirectionTranslation, Int_t *CrystalNumber)
FairGeoInterface * geoFace
Double_t Pi
TString outfile
TGeoVolume* makeGlueSample ( TGeoMedium *  Al_ext,
TGeoMedium *  Glue_ext,
Int_t  SampleNumber,
Bool_t  PassivePart,
Bool_t  ActivePart 
)

Definition at line 172 of file hypGeGeoCOSYsetup2014.C.

References Double_t.

Referenced by hypGeGeoCOSYsetup2014(), hypGeGeoCOSYsetup2014Actives(), hypGeGeoCOSYsetup2014Passives(), and hypGeGeoCOSYTarget().

173 {
174  // one glue sample sandwich is constructed in this function
175 
176  Double_t HolderThickness = 0.1; // 1 mm
177  Double_t GlueThickness = 0.003; // 40 µm
178  char buf[100];
179 
180  sprintf (buf,"GlueSampleAssembly%d", SampleNumber);
181  TGeoVolume *SampleAssembly = new TGeoVolumeAssembly (buf);
182 
183  sprintf (buf,"GlueHolderBox%d", SampleNumber);
184  TGeoBBox *GlueHolderBox = new TGeoBBox(buf,7.8/2,2.6/2,HolderThickness/2);
185  sprintf (buf,"GlueSampleBox%d", SampleNumber);
186  TGeoBBox *GlueBox = new TGeoBBox(buf,7.8/2,2.6/2,GlueThickness/2);
187 
188  sprintf (buf,"GlueHolder_%d", SampleNumber);
189  TGeoVolume *GlueHolder = new TGeoVolume (buf, GlueHolderBox, Al_ext);
190  sprintf (buf,"GlueHolder2_%d", SampleNumber);
191  TGeoVolume *GlueHolder2 = new TGeoVolume (buf, GlueHolderBox, Al_ext);
192 
193  sprintf (buf,"CrystalGlueSample%d", SampleNumber);
194  TGeoVolume *GlueSampleCrystal = new TGeoVolume (buf, GlueBox, Glue_ext);
195  GlueSampleCrystal->SetFillColor(kRed);
196  GlueSampleCrystal->SetLineColor(kRed);
197 
198  sprintf (buf,"GlueHolderTrans1%d", SampleNumber);
199  TGeoTranslation *GlueHolderTrans1 = new TGeoTranslation(buf,0,0,-HolderThickness/2);
200  GlueHolderTrans1->RegisterYourself();
201  sprintf (buf,"GlueHolderTrans2%d", SampleNumber);
202  TGeoTranslation *GlueHolderTrans2 = new TGeoTranslation(buf,0,0,-(HolderThickness+GlueThickness +HolderThickness/2));
203  GlueHolderTrans2->RegisterYourself();
204  sprintf (buf,"GlueTransd", SampleNumber);
205  TGeoTranslation *GlueTrans = new TGeoTranslation(buf,0,0,-(HolderThickness+GlueThickness/2));
206  GlueTrans->RegisterYourself();
207 
208  if (PassivePart)
209  {
210  SampleAssembly->AddNode(GlueHolder,0,GlueHolderTrans1);
211  SampleAssembly->AddNode(GlueHolder2,0,GlueHolderTrans2);
212  }
213  if (ActivePart)
214  SampleAssembly->AddNode(GlueSampleCrystal,3000+SampleNumber,GlueTrans);
215 
216  return SampleAssembly;
217 
218 }
Double_t
TGeoVolume* makeGlueStackFrame ( TGeoMedium *  Al_ext,
TGeoMedium *  Steel_ext 
)

Definition at line 141 of file hypGeGeoCOSYsetup2014.C.

References Double_t, and TString.

Referenced by hypGeGeoCOSYsetup2014(), hypGeGeoCOSYsetup2014Actives(), hypGeGeoCOSYsetup2014Passives(), and hypGeGeoCOSYTarget().

142 {
143  // (0,0,0) on the front of the front plate of the stack!
144  Double_t BarLength = 6;
145 
146  TGeoBBox *GlueSampleFrameFrontBox = new TGeoBBox("GlueSampleFrameFrontBox",4,4,0.2);
147  //TGeoVolume *GlueSampleFrameFront = new TGeoVolume("GlueSampleFrameFront", GlueSampleFrontBox,Med_ext);
148 
149  TGeoTranslation *GlueSampleFrontTrans = new TGeoTranslation("GlueSampleFrontTrans",0,0,-0.2);
150  GlueSampleFrontTrans->RegisterYourself();
151  TGeoTranslation *GlueSampleBackTrans = new TGeoTranslation("GlueSampleBackTrans",0,0,-(0.4+BarLength+0.2));
152  GlueSampleBackTrans->RegisterYourself();
153 
154  TGeoBBox *GlueSampleFrameBarBox = new TGeoBBox("GlueSampleFrameBarBox",.4,.4,BarLength/2);
155  //TGeoVolume *GlueSampleFrameBar = new TGeoVolume("GlueSampleFrameBar", GlueSampleFrontBox,Med_ext);
156 
157  TGeoTranslation *GlueSampleFrameBarTrans1 = new TGeoTranslation("GlueSampleFrameBarTrans1",1.4+0.4,1.4+0.4,-(BarLength/2+0.4));
158  GlueSampleFrameBarTrans1->RegisterYourself();
159  TGeoTranslation *GlueSampleFrameBarTrans2 = new TGeoTranslation("GlueSampleFrameBarTrans2",-(1.4+0.4),1.4+0.4,-(BarLength/2+0.4));
160  GlueSampleFrameBarTrans2->RegisterYourself();
161  TGeoTranslation *GlueSampleFrameBarTrans3 = new TGeoTranslation("GlueSampleFrameBarTrans3",-(1.4+0.4),-(1.4+0.4),-(BarLength/2+0.4));
162  GlueSampleFrameBarTrans3->RegisterYourself();
163  TGeoTranslation *GlueSampleFrameBarTrans4 = new TGeoTranslation("GlueSampleFrameBarTrans4",1.4+0.4,-(1.4+0.4),-(BarLength/2+0.4));
164  GlueSampleFrameBarTrans4->RegisterYourself();
165 
166  TString ShapeString = "GlueSampleFrameFrontBox : GlueSampleFrontTrans + GlueSampleFrameFrontBox : GlueSampleBackTrans + GlueSampleFrameBarBox : GlueSampleFrameBarTrans1 + GlueSampleFrameBarBox : GlueSampleFrameBarTrans2 + GlueSampleFrameBarBox : GlueSampleFrameBarTrans3 + GlueSampleFrameBarBox : GlueSampleFrameBarTrans4";
167  TGeoCompositeShape *GlueStackFrameShape = new TGeoCompositeShape("GlueStackFrameShape", ShapeString.Data());
168  TGeoVolume *GlueSampleFrame = new TGeoVolume("GlueSampleFrame", GlueStackFrameShape,Al_ext);
169  return GlueSampleFrame;
170 }
Double_t
TGeoShape* makeMaytec ( Double_t  length,
TString  Name 
)

Definition at line 23 of file hypGeGeoCOSYsetup2014.C.

References CAMath::Cos(), i, Pi, CAMath::Sin(), and TString.

Referenced by makeMaytecFrame().

24 {
25  char buf[100];
26  sprintf(buf, "%sRaw",Name.Data());
27  TGeoBBox *Raw = new TGeoBBox(buf,1.5,1.5,length/2);
28  sprintf(buf, "%sHole",Name.Data());
29  TGeoTube *Hole = new TGeoTube(buf,0,0.6, length);
30  sprintf(buf, "%sTrapez",Name.Data());
31  TGeoTrd1 *Trapez = new TGeoTrd1(buf,0.45,0.75,length,0.25);
32  sprintf(buf, "%sRectangle",Name.Data());
33  TGeoBBox *Rectangle = new TGeoBBox(buf,0.4,0.4,length);
34  sprintf(buf, "%sRectangle2",Name.Data());
35  TGeoBBox *Rectangle2 = new TGeoBBox(buf,0.15,0.5,length);
36  sprintf(buf, "%sRectangle3",Name.Data());
37  TGeoBBox *Rectangle3 = new TGeoBBox(buf,0.1,0.1,length);
38  sprintf(buf, "%sTube",Name.Data());
39  TGeoTubeSeg *Tube = new TGeoTubeSeg(buf, 0.2 , 1 ,length,0,90);
40 
41  TGeoCombiTrans *TrapezCombiTrans[4];
42  TGeoCombiTrans *RectangleCombiTrans[4];
43  TGeoCombiTrans *Rectangle2CombiTrans[4];
44  TGeoCombiTrans *Rectangle3CombiTrans[4];
45  TGeoCombiTrans *Rectangle3CombiTrans2[4];
46  TGeoCombiTrans *TubeCombiTrans[4];
47 
48  sprintf(buf,"%sRaw - %sHole",Name.Data(),Name.Data());
49  TString ShapeString = buf;
50 
51  // position and remove all the fine structure of a maytec profile
52  for (int i = 0; i< 4; i++)
53  {
54  sprintf(buf,"TrapezCombiTrans%d",i);
55  TrapezCombiTrans[i] = new TGeoCombiTrans(buf,1.05*TMath::Sin((i+1)*(TMath::Pi()/2)),1.05*TMath::Cos((i+1)*(TMath::Pi()/2)),0, new TGeoRotation("",90*(1-i),90,0) ); // sin for 4 fold symmetry
56  TrapezCombiTrans[i] ->RegisterYourself();
57  sprintf(buf,"-%sTrapez :TrapezCombiTrans%d",Name.Data(),i);
58  ShapeString += buf;
59  sprintf(buf,"RectangleCombiTrans%d",i);
60  RectangleCombiTrans[i] = new TGeoCombiTrans(buf,1.4*TMath::Sin((i+1)*(TMath::Pi()/2)),1.4*TMath::Cos((i+1)*(TMath::Pi()/2)),0, new TGeoRotation("",0,0,0) );
61  RectangleCombiTrans[i]->RegisterYourself();
62  sprintf(buf,"-%sRectangle :RectangleCombiTrans%d",Name.Data(),i);
63  ShapeString += buf;
64  sprintf(buf,"Rectangle2CombiTrans%d",i);
65  Rectangle2CombiTrans[i] = new TGeoCombiTrans(buf,0.9*pow(-1,i/2),0.9*pow(-1,(i+1)/2),0, new TGeoRotation("",-45+i*90,0,0) );
66  Rectangle2CombiTrans[i]->RegisterYourself();
67  sprintf(buf,"-%sRectangle2 :Rectangle2CombiTrans%d",Name.Data(),i);
68  ShapeString += buf;
69  sprintf(buf,"Rectangle3CombiTrans%d",i);
70  Rectangle3CombiTrans[i] = new TGeoCombiTrans(buf,0.9*pow(-1,i/2),1.58*pow(-1,(i+1)/2),0, new TGeoRotation("",0,0,0) );
71  Rectangle3CombiTrans[i]->RegisterYourself();
72  sprintf(buf,"-%sRectangle3 :Rectangle3CombiTrans%d",Name.Data(),i);
73  ShapeString += buf;
74  sprintf(buf,"Rectangle3CombiTrans2%d",i);
75  Rectangle3CombiTrans2[i] = new TGeoCombiTrans(buf,1.58*pow(-1,(i+1)/2),0.9*pow(-1,i/2),0, new TGeoRotation("",0,0,0) );
76  Rectangle3CombiTrans2[i]->RegisterYourself();
77  sprintf(buf,"-%sRectangle3 :Rectangle3CombiTrans2%d",Name.Data(),i);
78  ShapeString += buf;
79  sprintf(buf,"TubeCombiTrans%d",i);
80  TubeCombiTrans[i] = new TGeoCombiTrans(buf,1.3*pow(-1,(i+1)/2),1.3*pow(-1,i/2),0, new TGeoRotation("",i*90,0,0) );
81  TubeCombiTrans[i]->RegisterYourself();
82  sprintf(buf,"-%sTube :TubeCombiTrans%d",Name.Data(),i);
83  ShapeString += buf;
84  }
85 
86  TGeoCompositeShape *Profile = new TGeoCompositeShape(Name.Data(), ShapeString.Data());
87  //cout << ShapeString.Data() << endl;
88 
89 
90 
91  return Profile;
92 }
Int_t i
Definition: run_full.C:25
static T Sin(const T &x)
Definition: PndCAMath.h:42
static T Cos(const T &x)
Definition: PndCAMath.h:43
Double_t Pi
TGeoVolume* makeMaytecFrame ( TGeoMedium *  Med_ext)

Definition at line 94 of file hypGeGeoCOSYsetup2014.C.

References Double_t, and makeMaytec().

Referenced by hypGeGeoCOSYsetup2014(), hypGeGeoCOSYsetup2014Actives(), hypGeGeoCOSYsetup2014Passives(), and hypGeGeoCOSYTarget().

95 {
96  cout << "frame start" << endl;
97  TGeoVolumeAssembly *FrameAssembly= new TGeoVolumeAssembly("FrameAssembly");
98 
99  Double_t Height = 20.6;
100  Double_t Depth = 18.1;
101  Double_t Width = 24;
102  Double_t KermitWidth = 5;
103 
104  TGeoVolume *Pillar = new TGeoVolume ("Pillar", makeMaytec(Height,"Pillar"),Med_ext);
105  TGeoVolume *Pillar2 = new TGeoVolume ("Pillar2", makeMaytec(Height,"Pillar1"),Med_ext);
106  TGeoVolume *Pillar3 = new TGeoVolume ("Pillar3", makeMaytec(Height,"Pillar2"),Med_ext);
107  TGeoVolume *Pillar4 = new TGeoVolume ("Pillar4", makeMaytec(Height,"Pillar3"),Med_ext);
108  Pillar ->SetFillColor(kBlue);
109  Pillar ->SetFillColor(kBlue);
110  Pillar2 ->SetFillColor(kBlue);
111  Pillar2 ->SetFillColor(kBlue);
112  Pillar3 ->SetFillColor(kBlue);
113  Pillar3 ->SetFillColor(kBlue);
114  Pillar4 ->SetFillColor(kBlue);
115  Pillar4 ->SetFillColor(kBlue);
116  TGeoVolume *Beam1 = new TGeoVolume ("Beam1", makeMaytec(Width,"Beam1"),Med_ext);
117  TGeoVolume *Beam12 = new TGeoVolume ("Beam12", makeMaytec(Width,"Beam12"),Med_ext);
118  Beam1->SetFillColor(14);
119  Beam1 ->SetFillColor(14);
120  Beam12->SetFillColor(14);
121  Beam12 ->SetFillColor(14);
122  TGeoVolume *Beam2 = new TGeoVolume ("Beam2", makeMaytec(Depth,"Beam2"),Med_ext);
123  TGeoVolume *Beam22 = new TGeoVolume ("Beam22", makeMaytec(Depth,"Beam22"),Med_ext);
124  Beam2->SetFillColor(14);
125  Beam2 ->SetFillColor(14);
126  Beam22->SetFillColor(14);
127  Beam22 ->SetFillColor(14);
128  FrameAssembly ->AddNode(Pillar,1, new TGeoCombiTrans(Height/2,1.5,Width/2-1.5, new TGeoRotation("",90,90,0)));
129  FrameAssembly ->AddNode(Pillar2,2, new TGeoCombiTrans(Height/2,1.5,-(Width/2-1.5), new TGeoRotation("",90,90,0)));
130  FrameAssembly ->AddNode(Pillar3,3, new TGeoCombiTrans(Height/2,1.5+Depth+3,-(Width/2-1.5), new TGeoRotation("",90,90,0)));
131  FrameAssembly ->AddNode(Pillar4,4, new TGeoCombiTrans(Height/2,1.5+Depth+3,(Width/2-1.5), new TGeoRotation("",90,90,0)));
132  FrameAssembly ->AddNode(Beam1,1, new TGeoCombiTrans(Height+1.5,1.5,0, new TGeoRotation("",0,0,0)));
133  FrameAssembly ->AddNode(Beam12,2, new TGeoCombiTrans(Height+1.5,1.5+Depth+3,0, new TGeoRotation("",0,0,0)));
134  FrameAssembly ->AddNode(Beam2,1, new TGeoCombiTrans(Height+1.5,1.5+Depth/2+1.5,(KermitWidth/2+1.5), new TGeoRotation("",0,90,0)));
135  FrameAssembly ->AddNode(Beam22,2, new TGeoCombiTrans(Height+1.5,1.5+Depth/2+1.5,-(KermitWidth/2+1.5), new TGeoRotation("",0,90,0)));
136 
137 
138  cout << "frame built" << endl;
139  return FrameAssembly;
140 }
Double_t
TGeoShape * makeMaytec(Double_t length, TString Name)

Variable Documentation

double Pi = TMath::Pi()

Definition at line 5 of file hypGeGeoCOSYsetup2014.C.