// 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
//
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.42, 0., 0.);
- TGeoTranslation* trB77B = new TGeoTranslation("trB77B", -283.42, 0., 0.);
+ TGeoTranslation* trB77A = new TGeoTranslation("trB77A", +283.32, 0., 0.);
+ TGeoTranslation* trB77B = new TGeoTranslation("trB77B", -283.32, 0., 0.);
trB77A->RegisterYourself();
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
gMC->Gsvolu("BREF2", "BOX", kAir, pbox, 3);
gMC->Gspos("BREF2", 1, "B080", 3.37 - 0.05, 0., 0., 0, "ONLY");
- gMC->Gspos("B080", 1, "B077", 283.4, 0., 0., 0, "ONLY");
- gMC->Gspos("B080", 2, "B077", -283.4, 0., 0., idrotm[2087], "ONLY");
+ gMC->Gspos("B080", 1, "B077", 283.3, 0., 0., 0, "ONLY");
+ gMC->Gspos("B080", 2, "B077", -283.3, 0., 0., idrotm[2087], "ONLY");
//
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;
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);
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");
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
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
//
//
// Outer RING
- tpar[0] = kBFMRou - kBFRdr;
+ tpar[0] = kBFMRou - kBFRdr + 0.1;
tpar[1] = kBFMRou;
tpar[2] = kBFRdz / 2.;
}
-
+//___________________________________________
+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()
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 };
-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
//
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.);
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);
//
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.;
-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
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));