]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STRUCT/AliFRAMEv2.cxx
Allow to pass trigger mask value as parameter to AddTaskQAsym
[u/mrichter/AliRoot.git] / STRUCT / AliFRAMEv2.cxx
index acb185741d6bf43e9e0603673bec318690afca33..58941c87f4ae18995ef79a1b246baa4a30c36cfc 100644 (file)
 //  Author: A.Morsch
 //------------------------------------------------------------------------
 
-#include <TSystem.h>
-#include <TVirtualMC.h>
-#include <TString.h>
-#include <TGeoManager.h>
 #include <TGeoBBox.h>
+#include <TGeoCompositeShape.h>
+#include <TGeoGlobalMagField.h>
+#include <TGeoManager.h>
 #include <TGeoMatrix.h>
 #include <TGeoPgon.h>
-#include <TGeoCompositeShape.h>
+#include <TString.h>
+#include <TSystem.h>
+#include <TVirtualMC.h>
+
 #include "AliFRAMEv2.h"
 #include "AliMagF.h"
 #include "AliRun.h"
 #include "AliLog.h"
 #include "AliTrackReference.h"
  
+
+#include <TGeoTrd1.h>
+
 ClassImp(AliFRAMEv2)
 
  
 //_____________________________________________________________________________
-AliFRAMEv2::AliFRAMEv2():
+  AliFRAMEv2::AliFRAMEv2():
     fHoles(0)
 {
 // Constructor
@@ -162,8 +167,8 @@ void AliFRAMEv2::CreateGeometry()
 //
   TGeoPgon* shB77A = new TGeoPgon(0., 360., 18, 2);
   shB77A->SetName("shB77A");
-  shB77A->DefineSection( 0, -376., 280., 415.7);
-  shB77A->DefineSection( 1,  376., 280., 415.7);
+  shB77A->DefineSection( 0, -376.5, 280., 415.7);
+  shB77A->DefineSection( 1,  376.5, 280., 415.7);
   TGeoBBox* shB77B = new TGeoBBox(3.42, 2., 375.5);
   shB77B->SetName("shB77B");
   TGeoTranslation* trB77A = new TGeoTranslation("trB77A", +283.32, 0., 0.);
@@ -172,6 +177,7 @@ void AliFRAMEv2::CreateGeometry()
   trB77B->RegisterYourself();
   TGeoCompositeShape* shB77 = new TGeoCompositeShape("shB77", "shB77A+shB77B:trB77A+shB77B:trB77B");
   TGeoVolume* voB77 = new TGeoVolume("B077", shB77, gGeoManager->GetMedium("FRAME_Air"));
+  voB77->SetName("B077"); // just to avoid a warning
   gMC->Gspos("B077", 1, "ALIC", 0., 0., 0., 0, "ONLY");
 //
 // Reference plane #1 for TRD
@@ -516,7 +522,7 @@ void AliFRAMEv2::CreateGeometry()
 
   ptrd1[0] =  49.8;
   ptrd1[1] =  70.7;
-  ptrd1[2] = 376.0;    
+  ptrd1[2] = 376.5;  
   ptrd1[3] =  iFrH / 2.;  
   
   Float_t r      = 342.0;
@@ -530,7 +536,7 @@ void AliFRAMEv2::CreateGeometry()
       char name[16];
       Int_t mod = i + 13;
       if (mod > 17) mod -= 18;
-      sprintf(name, "BSEGMO%d", mod);
+      snprintf(name, 16, "BSEGMO%d", mod);
       gMC->Gsvolu(name, "TRD1", kAir, ptrd1, 4);
       gGeoManager->GetVolume(name)->SetVisibility(kFALSE);
 
@@ -543,8 +549,8 @@ void AliFRAMEv2::CreateGeometry()
       dx =  TMath::Sin(phi1*kdeg2rad)*r;
       dy = -TMath::Cos(phi1*kdeg2rad)*r;
       
-      char nameR[64];
-      sprintf(nameR, "B43_Rot_%d", i);
+      char nameR[16];
+      snprintf(nameR, 16, "B43_Rot_%d", i);
       TGeoRotation* rot = new TGeoRotation(nameR,  90.0, phi1, 0., 0., 90., phi2);  
       AliMatrix(idrotm[2034+i],  90.0, phi1, 0., 0., 90., phi2);  
       TGeoVolume* vol77 = gGeoManager->GetVolume("B077");
@@ -789,7 +795,7 @@ void AliFRAMEv2::CreateGeometry()
   for (i = 0; i < 18; i++) {
 
       char nameMo[16];
-      sprintf(nameMo, "BSEGMO%d",i);
+      snprintf(nameMo, 16, "BSEGMO%d",i);
       // M
       gMC->Gspos("BTSH_M" , i+1 , nameMo,  0., 0., dz, 0, "ONLY"); 
       // AM, CM
@@ -814,31 +820,47 @@ void AliFRAMEv2::CreateGeometry()
 
   for (i = 0; i < 18; i++) {
     char nameCh[16];
-    sprintf(nameCh, "BTRD%d",i);
+    snprintf(nameCh, 16, "BTRD%d",i);
     char nameMo[16];
-    sprintf(nameMo, "BSEGMO%d",i);
+    snprintf(nameMo, 16, "BSEGMO%d",i);
     gMC->Gsvolu(nameCh, "TRD1", kAir, ptrd1, 4);
     gGeoManager->GetVolume(nameCh)->SetVisibility(kFALSE);
     gMC->Gspos(nameCh, 1, nameMo, 0., 0., -12.62, 0, "ONLY"); // CBL 28/6/2006
   }
 
-//
-// TOF  mother volumes
-//
+// 
+// TOF mother volumes as modified by B.Guerzoni
+// to remove overlaps/extrusions in case of aligned TOF SMs
+// 
   ptrd1[0] = 62.2500; 
-  ptrd1[1] = 67.3631; 
-  ptrd1[2] = 373.6; 
-  ptrd1[3] = 14.525; //AdC
+  ptrd1[1] = 64.25; 
+  ptrd1[2] = 372.6; 
+  ptrd1[3] = 14.525/2;
+  char nameChA[16];
+  snprintf(nameChA, 16, "BTOFA");
+  TGeoTrd1 *trd1=new TGeoTrd1(nameChA,ptrd1[0],ptrd1[1],ptrd1[2],ptrd1[3]); 
+  trd1->SetName("BTOFA"); // just to avoid a warning
+  char nameChB[16];
+  snprintf(nameChB, 16, "BTOFB");
+  TGeoBBox *box1 = new TGeoBBox(nameChB,64.25 ,372.6, 14.525/2);
+  box1->SetName("BTOFB"); // just to avoid a warning
+  TGeoTranslation *tr1 = new TGeoTranslation("trnsl1",0, 0, -14.525/2 );
+  tr1->RegisterYourself();
+  TGeoTranslation *tr2 = new TGeoTranslation("trnsl2",0, 0, +14.525/2 );
+  tr2->RegisterYourself();
+  TGeoCompositeShape *Btofcs =new TGeoCompositeShape("Btofcs","(BTOFA:trnsl1)+(BTOFB:trnsl2)");
+
+
   for (i = 0; i < 18; i++) {
     char nameCh[16];
-    sprintf(nameCh, "BTOF%d",i);
+    snprintf(nameCh, 16, "BTOF%d",i);
     char nameMo[16];
-    sprintf(nameMo, "BSEGMO%d",i);
-    gMC->Gsvolu(nameCh, "TRD1", kAir, ptrd1, 4);
+    snprintf(nameMo, 16, "BSEGMO%d",i);
+    TGeoVolume* btf = new TGeoVolume(nameCh, Btofcs, gGeoManager->GetMedium("FRAME_Air"));
+    btf->SetName(nameCh); 
     gGeoManager->GetVolume(nameCh)->SetVisibility(kFALSE);
-    gMC->Gspos(nameCh, 1, nameMo, 0., 0., 43.525, 0, "ONLY"); //AdC
+    gMC->Gspos(nameCh, 1, nameMo, 0., 0., 43.525, 0, "ONLY"); 
   }
-
 //
 //    Geometry of Rails starts here
 //
@@ -1240,7 +1262,27 @@ void AliFRAMEv2::CreateGeometry()
 
 }
 
+//___________________________________________
+void AliFRAMEv2::AddAlignableVolumes() const
+{
+  // Add the 18 spaceframe sectors as alignable volumes
+  TString basesymname("FRAME/Sector");
+  TString basevolpath("ALIC_1/B077_1/BSEGMO");
+  TString symname;
+  TString volpath;
+  
+  for(Int_t sec=0; sec<18; sec++)
+  {
+      symname = basesymname;
+      symname += sec;
+      volpath = basevolpath;
+      volpath += sec;
+      volpath += "_1";
+      if(!gGeoManager->SetAlignableEntry(symname.Data(),volpath.Data()))
+       AliFatal(Form("Alignable entry %s not created. Volume path %s not valid",
+             symname.Data(),volpath.Data()));
+  }
+}
 
 //___________________________________________
 void AliFRAMEv2::CreateMaterials()
@@ -1253,8 +1295,8 @@ void AliFRAMEv2::CreateMaterials()
   tmaxfd = -20.;      // Maximum angle due to field deflection 
   deemax = -.3;       // Maximum fractional energy loss, DLS 
   stmin  = -.8;
-  Int_t   isxfld = gAlice->Field()->Integ();
-  Float_t sxmgmx = gAlice->Field()->Max();
+  Int_t   isxfld = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Integ();
+  Float_t sxmgmx = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Max();
 
 
   Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
@@ -1334,7 +1376,7 @@ void AliFRAMEv2::StepManager()
 
   
 
-void AliFRAMEv2::MakeHeatScreen(char* name, Float_t dyP, Int_t rot1, Int_t rot2)
+void AliFRAMEv2::MakeHeatScreen(const char* name, Float_t dyP, Int_t rot1, Int_t rot2)
 {
     // Heat screen panel
     //
@@ -1343,13 +1385,13 @@ void AliFRAMEv2::MakeHeatScreen(char* name, Float_t dyP, Int_t rot1, Int_t rot2)
     const Int_t kAlu   = idtmed[2008];
 
     Float_t dx, dy;
-    char mname [128];
-    char cname [128];
-    char t1name[128];
-    char t2name[128];
-    char t3name[128];
-    char t4name[128];
-    char t5name[128];
+    char mname[16];
+    char cname [16];
+    char t1name[16];
+    char t2name[16];
+    char t3name[16];
+    char t4name[16];
+    char t5name[16];
     
     // 
     Float_t dxP =  2. * (287. * TMath::Sin(10.* TMath::Pi()/180.) - 2.);
@@ -1360,12 +1402,12 @@ void AliFRAMEv2::MakeHeatScreen(char* name, Float_t dyP, Int_t rot1, Int_t rot2)
     thshM[0]  =  dxP / 2.;
     thshM[1]  =  dyP / 2.;
     thshM[2]  =  dzP / 2.;
-    sprintf(mname, "BTSH_%s", name);
+    snprintf(mname, 16, "BTSH_%s", name);
     gMC->Gsvolu(mname,  "BOX ", kAir, thshM,  3);
     //
     // Aluminum sheet
     thshM[2] = 0.025;
-    sprintf(cname, "BTSHA_%s", name);
+    snprintf(cname, 16, "BTSHA_%s", name);
     gMC->Gsvolu(cname, "BOX ", kAlu, thshM,  3);
     gMC->Gspos(cname, 1, mname, 0., 0., -0.5, 0);
     //
@@ -1375,15 +1417,15 @@ void AliFRAMEv2::MakeHeatScreen(char* name, Float_t dyP, Int_t rot1, Int_t rot2)
     thshT[1] = 0.5;
     thshT[2] = (dyP / 2. - 8.);
     //
-    sprintf(t1name, "BTSHT1_%s", name);
+    snprintf(t1name, 16, "BTSHT1_%s", name);
     gMC->Gsvolu(t1name,  "TUBE", kAlu, thshT,  3);
     dx = - dxP / 2. + 8. - 0.5;
     gMC->Gspos(t1name, 1, mname,  dx, 0., 0.025, rot1);
     //
-    sprintf(t2name, "BTSHT2_%s", name);
-    sprintf(t3name, "BTSHT3_%s", name);
-    sprintf(t4name, "BTSHT4_%s", name);
-    sprintf(t5name, "BTSHT5_%s", name);
+    snprintf(t2name, 16, "BTSHT2_%s", name);
+    snprintf(t3name, 16, "BTSHT3_%s", name);
+    snprintf(t4name, 16, "BTSHT4_%s", name);
+    snprintf(t5name, 16, "BTSHT5_%s", name);
     thshT[2] = (thshM[1] - 12.);
     gMC->Gsvolu(t2name,  "TUBE", kAlu, thshT,  3);
     thshT[2] = 7.9/2.;
@@ -1414,7 +1456,7 @@ void AliFRAMEv2::MakeHeatScreen(char* name, Float_t dyP, Int_t rot1, Int_t rot2)
 
 
 
-void AliFRAMEv2::WebFrame(char* name, Float_t dHz, Float_t theta0, Float_t phi0)
+void AliFRAMEv2::WebFrame(const char* name, Float_t dHz, Float_t theta0, Float_t phi0)
 {
     //
     // Create a web frame element
@@ -1426,8 +1468,8 @@ void AliFRAMEv2::WebFrame(char* name, Float_t dHz, Float_t theta0, Float_t phi0)
     const Int_t   kSteel = idtmed[2064];
 
     Float_t ptrap[11];
-    char nameA[64];
-    sprintf(nameA, "%sA", name );
+    char nameA[16];
+    snprintf(nameA, 16, "%sA", name );
     theta0 *= kdeg2rad;
     phi0   *= kdeg2rad;
     Float_t theta   = TMath::ATan(TMath::Tan(theta0)/TMath::Sin(phi0));