#include "AliITSv11GeometryUpgrade.h"
#include "AliITSv11GeomBeamPipe.h"
#include "AliITSvUpgrade.h"
+#include "AliITSgeomTGeoUpg.h"
#include "AliGeomManager.h"
const Double_t AliITSvUpgrade::fgkBeamPipeHalfZLen = 400;
fLadWidth(0),
fLadTilt(0),
fDetThick(0),
+ fDetTypeID(0),
fBeamPipe(0),
fBeamPipeRmin(0),
fBeamPipeRmax(0),
fLadWidth(0),
fLadTilt(0),
fDetThick(0),
+ fDetTypeID(0),
fBeamPipe(0),
fBeamPipeRmin(0),
fBeamPipeRmax(0),
fLadWidth = new Double_t[fIdN];
fLadTilt = new Double_t[fIdN];
fDetThick = new Double_t[fIdN];
+ fDetTypeID = new UInt_t[fIdN];
fUpGeom = new AliITSv11GeometryUpgrade*[fIdN];
fModPerLadd[j] = 0;
fLadWidth[j] = 0.;
fDetThick[j] = 0.;
+ fDetTypeID[j] = 0.;
fUpGeom[j] = 0;
}
fLadWidth(0),
fLadTilt(0),
fDetThick(0),
+ fDetTypeID(0),
fBeamPipe(0),
fBeamPipeRmin(0),
fBeamPipeRmax(0),
fIdN = nlay;
fIdName = new TString[fIdN];
- for (Int_t j=0; j<fIdN; j++)
- fIdName[j].Form("ITSupgSensor%d",j+1); // See AliITSv11GeometryUpgrade
+ for (Int_t j=0; j<fIdN; j++) fIdName[j].Form("%s%d",AliITSgeomTGeoUpg::GetITSSensorPattern(),j+1); // See AliITSv11GeometryUpgrade
(void) name; // removes warning message
fLadWidth = new Double_t[fIdN];
fLadTilt = new Double_t[fIdN];
fDetThick = new Double_t[fIdN];
+ fDetTypeID = new UInt_t[fIdN];
fUpGeom = new AliITSv11GeometryUpgrade*[fIdN];
fModPerLadd[j] = 0;
fLadWidth[j] = 0.;
fDetThick[j] = 0.;
+ fDetTypeID[j] = 0.;
fUpGeom[j] = 0;
}
delete [] fLadWidth;
delete [] fLadTilt;
delete [] fDetThick;
+ delete [] fDetTypeID;
delete [] fUpGeom;
}
AliFatal("TGeoManager doesn't exist !");
return;
}
+ TString pth,snm;
+ //
+ pth = Form("ALIC_1/%s_2",AliITSgeomTGeoUpg::GetITSVolPattern());
// RS: to be checked with MS
- if( !gGeoManager->SetAlignableEntry("ITS","ALIC_1/ITSV_2") )
- AliFatal(Form("Unable to set alignable entry ! %s :: %s","ITS","ALIC_1/ITSV_2"));
+ if( !gGeoManager->SetAlignableEntry("ITS",pth.Data()) )
+ AliFatal(Form("Unable to set alignable entry ! %s :: %s","ITS",pth.Data()));
//
- TString pth,snm;
for (int lr=0; lr<fNumberOfLayers; lr++) {
//
- pth = Form("ALIC_1/ITSV_2/ITSupgLayer%d_1",lr+1);
- snm = Form("ITS/LrUpg%d",lr+1);
+ pth = Form("ALIC_1/%s_2/%s%d_1"
+ ,AliITSgeomTGeoUpg::GetITSVolPattern()
+ ,AliITSgeomTGeoUpg::GetITSLayerPattern()
+ ,lr+1);
+ snm = Form("ITS/%s%d",AliITSgeomTGeoUpg::GetITSLayerPattern(),lr+1);
//printf("SetAlignable: %s %s\n",snm.Data(),pth.Data());
gGeoManager->SetAlignableEntry(snm.Data(),pth.Data());
int modNum = 0;
//
for (int ld=0; ld<fLaddPerLay[lr]; ld++) {
//
- TString pthL = Form("%s/ITSupgLadder%d_%d",pth.Data(),lr+1,ld+1);
- TString snmL = Form("%s/LaddUpg%d",snm.Data(),ld+1);
+ TString pthL = Form("%s/%s%d_%d",pth.Data(),AliITSgeomTGeoUpg::GetITSLadderPattern(),lr+1,ld+1);
+ TString snmL = Form("%s/%s%d",snm.Data(),AliITSgeomTGeoUpg::GetITSLadderPattern(),ld+1);
//printf("SetAlignable: %s %s\n",snmL.Data(),pthL.Data());
gGeoManager->SetAlignableEntry(snmL.Data(),pthL.Data());
//
for (int md=0; md<fModPerLadd[lr]; md++) {
//
- TString pthM = Form("%s/ITSupgModule%d_%d",pthL.Data(),lr+1,md+1);
- TString snmM = Form("%s/ModUpg%d",snmL.Data(),md+1);
+ TString pthM = Form("%s/%s%d_%d",pthL.Data(),AliITSgeomTGeoUpg::GetITSModulePattern(),lr+1,md+1);
+ TString snmM = Form("%s/%s%d",snmL.Data(),AliITSgeomTGeoUpg::GetITSModulePattern(),md+1);
//
int modUID = AliGeomManager::LayerToVolUID(lr+1,modNum++);
//
void AliITSvUpgrade::CreateGeometry() {
// Create the geometry and insert it in the mother volume ITSV
-
-
TGeoManager *geoManager = gGeoManager;
TGeoVolume *vALIC = geoManager->GetVolume("ALIC");
- new TGeoVolumeAssembly("ITSV");
- TGeoVolume *vITSV = geoManager->GetVolume("ITSV");
+ new TGeoVolumeAssembly(AliITSgeomTGeoUpg::GetITSVolPattern());
+ TGeoVolume *vITSV = geoManager->GetVolume(AliITSgeomTGeoUpg::GetITSVolPattern());
vALIC->AddNode(vITSV, 2, 0); // Copy number is 2 to cheat AliGeoManager::CheckSymNamesLUT
//
}
else
fUpGeom[j] = new AliITSv11GeometryUpgrade(j+1,kFALSE);
+ //
fUpGeom[j]->SetRadius(fLayRadii[j]);
fUpGeom[j]->SetZLength(fLayZLength[j]);
fUpGeom[j]->SetNLadders(fLaddPerLay[j]);
fUpGeom[j]->SetNModules(fModPerLadd[j]);
+ fUpGeom[j]->SetDetType(fDetTypeID[j]);
+ //
if (fLadThick[j] != 0) fUpGeom[j]->SetLadderThick(fLadThick[j]);
if (fDetThick[j] != 0) fUpGeom[j]->SetSensorThick(fDetThick[j]);
fUpGeom[j]->CreateLayer(vITSV);
}
-
+ //
// Finally add the beam pipe
if (fBeamPipe) {
fBPGeom = new AliITSv11GeomBeamPipe(fBeamPipeRmin, fBeamPipeRmax,
fBeamPipeZlen, kFALSE);
fBPGeom->CreateBeamPipe(vALIC); // We put the BP in the ALIC volume
}
-
}
//______________________________________________________________________
-void AliITSvUpgrade::CreateMaterials(){
+void AliITSvUpgrade::CreateMaterials() {
// Create ITS materials
// This function defines the default materials used in the Geant
// Monte Carlo simulations for the geometries AliITSv1, AliITSv3,
AliMaterial(8,"BERILLIUM$",9.01, 4., 1.848, 35.3, 36.7);// From AliPIPEv3
AliMedium(8,"BERILLIUM$",8,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
-
+
}
//______________________________________________________________________
void AliITSvUpgrade::DefineLayer(const Int_t nlay, const Double_t r,
const Double_t zlen, const Int_t nladd,
const Int_t nmod, const Double_t lthick,
- const Double_t dthick){
- // Sets the layer parameters
- // Inputs:
- // nlay layer number
- // r layer radius
- // zlen layer length
- // nladd number of ladders
- // nmod number of modules per ladder
- // lthick ladder thickness (if omitted, defaults to 0)
- // dthick detector thickness (if omitted, defaults to 0)
- // Outputs:
- // none.
- // Return:
- // none.
-
- if (nlay >= fNumberOfLayers || nlay < 0) {
- AliError(Form("Wrong layer number (%d)",nlay));
- return;
- }
-
- fLayTurbo[nlay] = kFALSE;
- fLayRadii[nlay] = r;
- fLayZLength[nlay] = zlen;
- fLaddPerLay[nlay] = nladd;
- fModPerLadd[nlay] = nmod;
- fLadThick[nlay] = lthick;
- fDetThick[nlay] = dthick;
+ const Double_t dthick, const UInt_t dettypeID)
+{
+ // Sets the layer parameters
+ // Inputs:
+ // nlay layer number
+ // r layer radius
+ // zlen layer length
+ // nladd number of ladders
+ // nmod number of modules per ladder
+ // lthick ladder thickness (if omitted, defaults to 0)
+ // dthick detector thickness (if omitted, defaults to 0)
+ // Outputs:
+ // none.
+ // Return:
+ // none.
+
+ if (nlay >= fNumberOfLayers || nlay < 0) {
+ AliError(Form("Wrong layer number (%d)",nlay));
+ return;
+ }
+
+ fLayTurbo[nlay] = kFALSE;
+ fLayRadii[nlay] = r;
+ fLayZLength[nlay] = zlen;
+ fLaddPerLay[nlay] = nladd;
+ fModPerLadd[nlay] = nmod;
+ fLadThick[nlay] = lthick;
+ fDetThick[nlay] = dthick;
+ fDetTypeID[nlay] = dettypeID;
+
}
//______________________________________________________________________
const Int_t nmod, const Double_t width,
const Double_t tilt,
const Double_t lthick,
- const Double_t dthick){
+ const Double_t dthick,
+ const UInt_t dettypeID)
+{
// Sets the layer parameters for a "turbo" layer
// (i.e. a layer whose ladders overlap in phi)
// Inputs:
fLadWidth[nlay] = width;
fLadTilt[nlay] = tilt;
fDetThick[nlay] = dthick;
+ fDetTypeID[nlay] = dettypeID;
+ //
}
//______________________________________________________________________
return;
}
+//______________________________________________________________________
+void AliITSvUpgrade::SetLayerDetTypeID(Int_t lr, UInt_t id)
+{
+ // set det type
+ if (!fDetTypeID || fNumberOfLayers<=lr) AliFatal(Form("Number of layers %d, %d is manipulated",fNumberOfLayers,lr));
+ fDetTypeID[lr] = id;
+}
+
+//______________________________________________________________________
+Int_t AliITSvUpgrade::GetLayerDetTypeID(Int_t lr)
+{
+ // set det type
+ if (!fDetTypeID || fNumberOfLayers<=lr) AliFatal(Form("Number of layers %d, %d is manipulated",fNumberOfLayers,lr));
+ return fDetTypeID[lr];
+}