// : Aleksei Pavlinov (WSU) SHASHLYK
// --- ROOT system ---
+#include <cassert>
#include <TNode.h>
#include <TBRIK.h>
kIdSC = 1601,
kIdSTEEL = 1603
};
+
+
+//______________________________________________________________________
+AliEMCALv0::AliEMCALv0()
+ : AliEMCAL(),
+ fShishKebabModules(),fEnvelop1(0),fIdRotm(0),fIdTmedArr(0),
+ fSampleWidth(0),fSmodPar0(0),fSmodPar1(0),fSmodPar2(0)
+{
+ //default ctor
+}
+
//______________________________________________________________________
-AliEMCALv0::AliEMCALv0(const char *name, const char *title):
- AliEMCAL(name,title)
+AliEMCALv0::AliEMCALv0(const char *name, const char *title)
+ : AliEMCAL(name,title),
+ fShishKebabModules(),fEnvelop1(0),fIdRotm(0),fIdTmedArr(0),
+ fSampleWidth(0),fSmodPar0(0),fSmodPar1(0),fSmodPar2(0)
{
// ctor : title is used to identify the layout
+ // Apr 25, 2006
+ // Nov 22, 2006 - case of 1X1
+ TString ntmp(GetTitle());
+ ntmp.ToUpper();
+ if(ntmp == "TRD1") { // TRD1 is alias for SHISH_77_TRD1_2X2_FINAL_110DEG NL=69
+ ntmp = "SHISH_77_TRD1_2X2_FINAL_110DEG NL=69";
+ SetTitle(ntmp.Data());
+ }
+
AliEMCALGeometry *geom = GetGeometry() ;
//geom->CreateListOfTrd1Modules();
fShishKebabModules = geom->GetShishKebabTrd1Modules();
TPGON *pgon = new TPGON(envn, "PGON that contains arm 1", "void",
geom->GetArm1PhiMin(),geom->GetArm1PhiMax()-geom->GetArm1PhiMin(),geom->GetNPhiSuperModule(), 2);
// define section
+ if (fEnvelop1.GetSize()<8) {
+ fEnvelop1.Set(10);
+ fEnvelop1[0] = geom->GetArm1PhiMin(); // minimum phi angle
+ fEnvelop1[1] = geom->GetArm1PhiMax() - geom->GetArm1PhiMin(); // angular range in phi
+ fEnvelop1[2] = geom->GetNPhi(); // number of sections in phi
+ fEnvelop1[3] = 2; // 2 z coordinates
+ fEnvelop1[4] = -350.;
+ fEnvelop1[5] = geom->GetEnvelop(0) ; // rmin at z1
+ fEnvelop1[6] = geom->GetEnvelop(1) ; // rmax at z1
+ fEnvelop1[7] = 350.;
+ fEnvelop1[8] = fEnvelop1[5] ; // radii are the same.
+ fEnvelop1[9] = fEnvelop1[6] ; // radii are the same.
+
+ if(gn.Contains("SHISH"))
+ fEnvelop1[2] = geom->GetNPhiSuperModule();
+ }
pgon->DefineSection(0, fEnvelop1[4], fEnvelop1[5], fEnvelop1[6]);
pgon->DefineSection(1, fEnvelop1[7], fEnvelop1[5], fEnvelop1[6]);
top->cd();
envelopA[1] = geom->GetArm1PhiMax() - geom->GetArm1PhiMin(); // angular range in phi
envelopA[2] = geom->GetNPhi(); // number of sections in phi
envelopA[3] = 2; // 2 z coordinates
- envelopA[4] = geom->ZFromEtaR(geom->GetEnvelop(1),
- geom->GetArm1EtaMin()); // z coordinate 1
+ // envelopA[4] = geom->ZFromEtaR(geom->GetEnvelop(1),
+//geom->GetArm1EtaMin()); // z coordinate 1
+ envelopA[4] = -350.; // AM 30/5/2006
+
//add some padding for mother volume
envelopA[5] = geom->GetEnvelop(0) ; // rmin at z1
envelopA[6] = geom->GetEnvelop(1) ; // rmax at z1
- envelopA[7] = geom->ZFromEtaR(geom->GetEnvelop(1),
- geom->GetArm1EtaMax()); // z coordinate 2
+// envelopA[7] = geom->ZFromEtaR(geom->GetEnvelop(1),
+// geom->GetArm1EtaMax()); // z coordinate 2
+ envelopA[7] = 350.; // AM 30/5/2006
+
envelopA[8] = envelopA[5] ; // radii are the same.
envelopA[9] = envelopA[6] ; // radii are the same.
if(gn.Contains("SHISH")){
// COMPACT, TWIST, TRD2 or TRD1
+ AliDebug(2,Form("Shish-Kebab geometry : %s", GetTitle()));
CreateShishKebabGeometry();
}
}
void AliEMCALv0::Init(void)
{
// Just prints an information message
-
+ AliEMCAL::Init();
if(AliLog::GetGlobalDebugLevel()>0) {
TString message("\n") ;
message += "*****************************************\n" ;
CreateEmod("SMOD","EMOD"); // 18-may-05
- if(gn.Contains("110DEG")) CreateEmod("SM10","EMOD"); // 12-oct-05
+ if(g->GetKey110DEG()) CreateEmod("SM10","EMOD"); // Nov 1,2006
// Sensitive SC (2x2 tiles)
- double parSCM0[5], *dummy = 0, parTRAP[11];
+ double parSCM0[5]={0,0,0,0}, *dummy = 0, parTRAP[11];
Double_t trd1Angle = g->GetTrd1Angle()*TMath::DegToRad(), tanTmp = TMath::Tan(trd1Angle/2.);
if(!gn.Contains("TRD")) { // standard module
par[0] = (g->GetECPbRadThick()+g->GetECScintThick())*g->GetNECLayers()/2.;
gMC->Gsvolu("SCM0", "TRD1", fIdTmedArr[kIdAIR], parSCM0, 4);
gMC->Gspos("SCM0", 1, "EMOD", 0., 0., dzTmp/2., 0, "ONLY") ;
} else { // before MAY 2005
- double wallThickness = g->GetPhiModuleSize()/2. - g->GetPhiTileSize(); // Need check
+ // double wallThickness = g->GetPhiModuleSize()/2. - g->GetPhiTileSize(); // Need check
+ double wallThickness = g->GetPhiModuleSize()/g->GetNPHIdiv() - g->GetPhiTileSize();
for(int i=0; i<3; i++) parSCM0[i] = fParEMOD[i] - wallThickness;
parSCM0[3] = fParEMOD[3];
gMC->Gsvolu("SCM0", "TRD1", fIdTmedArr[kIdAIR], parSCM0, 4);
if(g->GetNPHIdiv()==2 && g->GetNETAdiv()==2) {
// Division to tile size - 1-oct-04
- printf("<I> Divide SCM0 on y-axis %i\n", g->GetNETAdiv());
+ AliDebug(2,Form(" Divide SCM0 on y-axis %i\n", g->GetNETAdiv()));
gMC->Gsdvn("SCMY","SCM0", g->GetNETAdiv(), 2); // y-axis
// Trapesoid 2x2
parTRAP[0] = parSCM0[3]; // dz
parTRAP[8] = parSCM0[1]/2.; // BL2
parTRAP[9] = parTRAP[8]; // TL2
parTRAP[10]= 0.0; // ALP2
- printf(" ** TRAP ** \n");
+ AliDebug(2,Form(" ** TRAP ** \n"));
for(int i=0; i<11; i++) AliDebug(3, Form(" par[%2.2i] %9.4f\n", i, parTRAP[i]));
gMC->Gsvolu("SCMX", "TRAP", fIdTmedArr[kIdSC], parTRAP, 11);
zpos = -fSampleWidth*g->GetNECLayers()/2. + g->GetECPbRadThick()/2.;
double xCenterSCMX = (parTRAP[4] + parTRAP[8])/2.;
if(!gn.Contains("NOPB")) { // for testing - 11-jul-05
- printf(" Pb tiles \n");
+ AliDebug(2,Form(" Pb tiles \n"));
for(int iz=0; iz<g->GetNECLayers(); iz++){
par[0] = (parSCM0[0] + mod->GetTanBetta()*fSampleWidth*iz)/2.;
xpos = par[0] - xCenterSCMX;
AliDebug(3,Form(" %i xpos %f zpos %f par[0] %f \n", iz+1, xpos, zpos, par[0]));
zpos += fSampleWidth;
}
- printf(" Number of Pb tiles in SCMX %i \n", nr);
+ AliDebug(2,Form(" Number of Pb tiles in SCMX %i \n", nr));
}
} else if(g->GetNPHIdiv()==3 && g->GetNETAdiv()==3) {
+ printf(" before AliEMCALv0::Trd1Tower3X3() : parSCM0");
+ for(int i=0; i<4; i++) printf(" %7.4f ", parSCM0[i]);
+ printf("\n");
Trd1Tower3X3(parSCM0);
+ } else if(g->GetNPHIdiv()==1 && g->GetNETAdiv()==1) {
+ // no division in SCM0
+ Trd1Tower1X1(parSCM0);
} else if(g->GetNPHIdiv()==4 && g->GetNETAdiv()==4) {
Trd1Tower4X4();
}
} else if(gn.Contains("TRD2")) { // TRD2 - 14-jan-05
// Scm0InTrd2(g, fParEMOD, parSCM0); // First dessin
- PbmoInTrd2(g, fParEMOD, parSCM0); // Second dessin
+ PbmoInTrd2(g, fParEMOD, parSCM0); // Second design
}
}
Double_t par1C = 0.;
// ===== define Super Module from air - 14x30 module ==== ;
fSampleWidth = double(g->GetECPbRadThick()+g->GetECScintThick());
- printf("\n ## Super Module | fSampleWidth %5.3f ## %s \n", fSampleWidth, gn.Data());
+ AliDebug(2,Form("\n ## Super Module | fSampleWidth %5.3f ## %s \n", fSampleWidth, gn.Data()));
par[0] = g->GetShellThickness()/2.;
par[1] = g->GetPhiModuleSize()*g->GetNPhi()/2.;
par[2] = g->GetEtaModuleSize()*15.;
int nphism = g->GetNumberOfSuperModules()/2; // 20-may-05
if(nphism>0) {
dphi = (g->GetArm1PhiMax() - g->GetArm1PhiMin())/nphism;
- // if(gn.Contains("110DEG")) dphi = (g->GetArm1PhiMax() - g->GetArm1PhiMin())/(nphism-1);
+ // if(g->GetKey110DEG()) dphi = (g->GetArm1PhiMax() - g->GetArm1PhiMin())/(nphism-1);
rpos = (g->GetEnvelop(0) + g->GetEnvelop(1))/2.;
- printf(" rpos %8.2f : dphi %6.1f degree \n", rpos, dphi);
+ AliDebug(2,Form(" rpos %8.2f : dphi %6.1f degree \n", rpos, dphi));
}
if (gn.Contains("TRD2")) { // tubs - 27-jan-05
gMC->Gsvolu("SMOP", "TUBS", fIdTmedArr[kIdAIR], parTubs, 5); // pozitive Z
gMC->Gsvolu("SMON", "TUBS", fIdTmedArr[kIdAIR], parTubs, 5); // negative Z
- printf(" SMOP,N ** TUBS **\n");
- printf("tmed %i | Rmin %7.2f Rmax %7.2f dz %7.2f phi1,2 (%7.2f,%7.2f)\n",
- fIdTmedArr[kIdAIR], parTubs[0],parTubs[1],parTubs[2], parTubs[3],parTubs[4]);
+ AliDebug(2,Form(" SMOP,N ** TUBS **\n"));
+ AliDebug(2,Form("tmed %i | Rmin %7.2f Rmax %7.2f dz %7.2f phi1,2 (%7.2f,%7.2f)\n",
+ fIdTmedArr[kIdAIR], parTubs[0],parTubs[1],parTubs[2], parTubs[3],parTubs[4]));
// have to add 1 cm plastic before EMOD - time solution
} else if(gn.Contains("WSUC")) {
par[0] = g->GetPhiModuleSize()*g->GetNPhi()/2.;
gMC->Gsvolu("SMOD", "BOX", fIdTmedArr[kIdAIR], par, 3);
- printf("SMOD in WSUC : tmed %i | dx %7.2f dy %7.2f dz %7.2f (SMOD, BOX)\n",
- fIdTmedArr[kIdAIR], par[0],par[1],par[2]);
+ AliDebug(2,Form("SMOD in WSUC : tmed %i | dx %7.2f dy %7.2f dz %7.2f (SMOD, BOX)\n",
+ fIdTmedArr[kIdAIR], par[0],par[1],par[2]));
fSmodPar0 = par[0];
fSmodPar1 = par[1];
fSmodPar2 = par[2];
} else if(gn.Contains("TRD")) {
par[2] = 350./2.; // 11-oct-04 - for 26 division
if(gn.Contains("TRD1")) {
- printf(" par[0] %7.2f (old) \n", par[0]);
+ AliDebug(2,Form(" par[0] %7.2f (old) \n", par[0]));
Float_t *parSM = g->GetSuperModulesPars();
for(int i=0; i<3; i++) par[i] = parSM[i];
}
}
gMC->Gsvolu("SMOD", "BOX", fIdTmedArr[kIdAIR], par, 3);
- printf("tmed %i | dx %7.2f dy %7.2f dz %7.2f (SMOD, BOX)\n",
- fIdTmedArr[kIdAIR], par[0],par[1],par[2]);
+ AliDebug(2,Form("tmed %i | dx %7.2f dy %7.2f dz %7.2f (SMOD, BOX)\n",
+ fIdTmedArr[kIdAIR], par[0],par[1],par[2]));
fSmodPar0 = par[0];
fSmodPar2 = par[2];
- if(gn.Contains("110DEG")) { // 12-oct-05
+ if(g->GetKey110DEG()) { // 12-oct-05
par1C = par[1];
par[1] /= 2.;
gMC->Gsvolu("SM10", "BOX", fIdTmedArr[kIdAIR], par, 3);
- printf(" Super module with name \"SM10\" was created too par[1] = %f\n", par[1]);
+ AliDebug(2,Form(" Super module with name \"SM10\" was created too par[1] = %f\n", par[1]));
par[1] = par1C;
}
// Steel plate
nr++;
} else { // TRD1
TString smName("SMOD"); // 12-oct-05
- if(i==5 && gn.Contains("110DEG")) {
+ if(i==5 && g->GetKey110DEG()) {
smName = "SM10";
nrsmod = nr;
nr = 0;
xpos = rpos * TMath::Cos(phiRad);
ypos = rpos * TMath::Sin(phiRad);
zpos = fSmodPar2; // 21-sep-04
- if(i==5 && gn.Contains("110DEG")) {
+ if(i==5 && g->GetKey110DEG()) {
xpos += (par1C/2. * TMath::Sin(phiRad));
ypos -= (par1C/2. * TMath::Cos(phiRad));
}
}
}
}
- printf(" Number of Super Modules %i \n", nr+nrsmod);
+ AliDebug(2,Form(" Number of Super Modules %i \n", nr+nrsmod));
}
void AliEMCALv0::CreateEmod(const char* mother, const char* child)
zpos = mod->GetPosZ() - fSmodPar2;
int iyMax = g->GetNPhi();
- if(strcmp(mother,"SMOD") && gn.Contains("110DEG")) {
+ if(strcmp(mother,"SMOD") && g->GetKey110DEG()) {
iyMax /= 2;
}
for(int iy=0; iy<iyMax; iy++) { // flat in phi
//printf(" %2i xpos %7.2f ypos %7.2f zpos %7.2f fIdRotm %i\n", nr, xpos, ypos, zpos, fIdRotm);
AliDebug(3,Form("%3.3i(%2.2i,%2.2i) ", nr,iy+1,iz+1));
}
- printf("\n");
+ //PH printf("\n");
} else {
if(iz==0) AliMatrix(fIdRotm, 0.,0., 90.,0., 90.,90.); // (x')z; y'(x); z'(y)
else AliMatrix(fIdRotm, 90-angle,270., 90.0,0.0, angle,90.);
fShishKebabModules->Add(mod);
phiOK = mod->GetCenterOfModule().Phi()*180./TMath::Pi();
- printf(" %i | theta | %6.3f - %6.3f = %6.3f\n", iz+1, angle, phiOK, angle-phiOK);
+ AliDebug(2,Form(" %i | theta | %6.3f - %6.3f = %6.3f\n", iz+1, angle, phiOK, angle-phiOK));
zpos = mod->GetPosZ() - parTubs[2];
rpos = parTubs[0] + mod->GetPosXfromR();
theta3 = 180.-theta3; phi3 = angEtaRow;
AliMatrix(fIdRotm, theta1,phi1, theta2,phi2, theta3,phi3);
gMC->Gspos(child, nr, "SMON", xpos, ypos, -zpos, fIdRotm, "ONLY") ;
- if(0) {
+ if(AliDebugLevel()>=2) {
printf(" angEtaRow(phi) %7.2f | angle(eta) %7.2f \n", angEtaRow, angle);
printf("iy=%2i xpos %7.2f ypos %7.2f zpos %7.2f fIdRotm %i\n", iy, xpos, ypos, zpos, fIdRotm);
}
}
}
}
- printf(" Number of modules in Super Module %i \n", nr);
+ AliDebug(2,Form(" Number of modules in Super Module(%s) %i \n", mother, nr));
}
-// 8-dec-04 by PAI
-void AliEMCALv0::Trd1Tower3X3(const double parSCM0[4])
+void AliEMCALv0::Trd1Tower3X3(const double *parSCM0)
{
- // PB should be for whole SCM0 - ?
+ // Started Dec 8,2004 by PAI
+ // Fixed Nov 13,2006
+ printf(" AliEMCALv0::Trd1Tower3X3() : parSCM0");
+ for(int i=0; i<4; i++) printf(" %7.4f ", parSCM0[i]);
+ printf("\n");
+ // Nov 10, 2006 - different name of SCMX
double parTRAP[11], *dummy=0;
AliEMCALGeometry * g = GetGeometry();
TString gn(g->GetName()), scmx;
gn.ToUpper();
// Division to tile size
- Info("Trd1Tower3X3()","<I> Divide SCM0 on y-axis %i", g->GetNETAdiv());
+ AliDebug(2,Form("Trd1Tower3X3() : Divide SCM0 on y-axis %i", g->GetNETAdiv()));
gMC->Gsdvn("SCMY","SCM0", g->GetNETAdiv(), 2); // y-axis
double dx1=parSCM0[0], dx2=parSCM0[1], dy=parSCM0[2], dz=parSCM0[3];
double ndiv=3., xpos=0.0;
// should be defined once
gMC->Gsvolu("PBTI", "BOX", fIdTmedArr[kIdPB], dummy, 0);
- if(gn.Contains("TEST")==0) { // one name for all trapesoid
- scmx = "SCMX";
- gMC->Gsvolu(scmx.Data(), "TRAP", fIdTmedArr[kIdSC], dummy, 0);
- }
-
-
for(int ix=1; ix<=3; ix++) { // 3X3
+ scmx = "SCX"; // Nov 10,2006
// ix=1
parTRAP[0] = dz;
- parTRAP[1] = TMath::ATan2((dx2-dx1)/2.,2.*dz)*TMath::RadToDeg(); // theta
+ double xCentBot = 2.*dx1/3.;
+ double xCentTop = 2.*(dx2/4. + dx1/12.);
+ parTRAP[1] = TMath::ATan2((xCentTop-xCentBot),2.*dz)*TMath::RadToDeg(); // theta
parTRAP[2] = 0.; // phi
// bottom
parTRAP[3] = dy/ndiv; // H1
parTRAP[6] = 0.0; // ALP1
// top
parTRAP[7] = dy/ndiv; // H2
- parTRAP[8] = dx2/ndiv; // BL2
+ parTRAP[8] = dx2/2 - dx1/6.;// BL2
parTRAP[9] = parTRAP[8]; // TL2
parTRAP[10]= 0.0; // ALP2
- xpos = +(dx1+dx2)/3.; // 6 or 3
+ xpos = (xCentBot+xCentTop)/2.;
if (ix==3) {
parTRAP[1] = -parTRAP[1];
parTRAP[9] = parTRAP[8]; // TL2
xpos = 0.0;
}
- printf(" ** TRAP ** xpos %9.3f\n", xpos);
- for(int i=0; i<11; i++) printf(" par[%2.2i] %9.4f\n", i, parTRAP[i]);
- if(gn.Contains("TEST")){
- scmx = "SCX"; scmx += ix;
- gMC->Gsvolu(scmx.Data(), "TRAP", fIdTmedArr[kIdSC], parTRAP, 11);
- gMC->Gspos(scmx.Data(), 1, "SCMY", xpos, 0.0, 0.0, 0, "ONLY") ;
- } else {
- gMC->Gsposp(scmx.Data(), ix, "SCMY", xpos, 0.0, 0.0, 0, "ONLY", parTRAP, 11) ;
- }
+ AliDebug(2,Form(" ** TRAP ** xpos %9.3f\n", xpos));
+ for(int i=0; i<11; i++) AliDebug(2,Form(" par[%2.2i] %9.4f\n", i, parTRAP[i]));
+
+ scmx += ix;
+ gMC->Gsvolu(scmx.Data(), "TRAP", fIdTmedArr[kIdSC], parTRAP, 11);
+ gMC->Gspos(scmx.Data(), 1, "SCMY", xpos, 0.0, 0.0, 0, "ONLY") ;
+
PbInTrap(parTRAP, scmx);
}
-
- Info("Trd1Tower3X3()", "Ver. 1.0 : was tested.");
+ AliDebug(2,Form("Trd1Tower3X3()", "Ver. 1.0 : was tested."));
}
// 8-dec-04 by PAI
{
// see for example CreateShishKebabGeometry(); just for case TRD1
static int nr=0;
- printf(" Pb tiles : nrstart %i\n", nr);
+ AliDebug(2,Form(" Pb tiles : nrstart %i\n", nr));
AliEMCALGeometry * g = GetGeometry();
double par[3];
xpos = par[0] - xCenterSCMX;
if(parTRAP[1] < 0.) xpos = -xpos;
gMC->Gsposp("PBTI", ++nr, n.Data(), xpos, ypos, zpos, 0, "ONLY", par, 3) ;
- printf(" %i xpos %9.3f zpos %9.3f par[0] %9.3f |", iz+1, xpos, zpos, par[0]);
+ AliDebug(2,Form(" %i xpos %9.3f zpos %9.3f par[0] %9.3f |", iz+1, xpos, zpos, par[0]));
zpos += fSampleWidth;
if(iz%2>0) printf("\n");
}
- printf(" Number of Pb tiles in SCMX %i coef %9.7f \n", nr, coef);
- printf(" par[1] %9.3f par[2] %9.3f ypos %9.3f \n", par[1], par[2], ypos);
- Info("PbInTrap", "Ver. 1.0 : was tested.");
+ AliDebug(2,Form(" Number of Pb tiles in SCMX %i coef %9.7f \n", nr, coef));
+ AliDebug(2,Form(" par[1] %9.3f par[2] %9.3f ypos %9.3f \n", par[1], par[2], ypos));
+ AliDebug(2,Form(" PbInTrap Ver. 1.0 : was tested."));
}
// 8-dec-04 by PAI
{
// Not ready yet
}
+
+void AliEMCALv0::Trd1Tower1X1(double *parSCM0)
+{
+ // Started Nov 22,2006 by PAI
+ AliDebug(1," AliEMCALv0::Trd1Tower1X1() : parSCM0");
+ for(int i=0; i<4; i++) printf(" %7.4f ", parSCM0[i]);
+ printf("\n");
+
+ // No division - keeping the same volume logic
+ // and as consequence the same abs is scheme
+ AliDebug(2,"Trd1Tower1X1() : Create SCMX(SCMY) as SCM0");
+
+ gMC->Gsvolu("SCMY", "TRD1", fIdTmedArr[kIdAIR], parSCM0, 4);
+ gMC->Gspos("SCMY", 1, "SCM0", 0.0, 0.0, 0.0, 0, "ONLY");
+ gMC->Gsvolu("SCMX", "TRD1", fIdTmedArr[kIdSC], parSCM0, 4);
+ gMC->Gspos("SCMX", 1, "SCMY", 0.0, 0.0, 0.0, 0, "ONLY");
+
+ // should be defined once
+ double *dummy=0;
+ gMC->Gsvolu("PBTI", "BOX", fIdTmedArr[kIdPB], dummy, 0);
+
+ PbInTrd1(parSCM0, "SCMX");
+
+ AliDebug(1,"Trd1Tower1X1() : Ver. 0.1 : was tested.");
+}
+
+void AliEMCALv0::PbInTrd1(double *parTrd1, TString n)
+{
+ // see PbInTrap(const double parTrd1[11], TString n)
+ static int nr=0, ndeb=2;
+ AliDebug(ndeb,Form(" Pb tiles : nrstart %i\n", nr));
+ AliEMCALGeometry * g = GetGeometry();
+
+ double par[3];
+ // double fSampleWidth = double(g->GetECPbRadThick()+g->GetECScintThick());
+ double xpos = 0.0, ypos = 0.0;
+ double zpos = -fSampleWidth*g->GetNECLayers()/2. + g->GetECPbRadThick()/2.;
+ double coef = (parTrd1[1] - parTrd1[0]) / (2.*parTrd1[3]);
+
+ par[1] = parTrd1[2]; // y
+ par[2] = g->GetECPbRadThick()/2.; // z
+
+ for(int iz=0; iz<g->GetNECLayers(); iz++){
+ par[0] = parTrd1[0] + coef*fSampleWidth*iz;
+ gMC->Gsposp("PBTI", ++nr, n.Data(), xpos, ypos, zpos, 0, "ONLY", par, 3) ;
+ AliDebug(2,Form(" %i xpos %9.3f zpos %9.3f par[0] %9.3f |", iz+1, xpos, zpos, par[0]));
+ zpos += fSampleWidth;
+ if(iz%2>0) printf("\n");
+ }
+ AliDebug(ndeb,Form(" Number of Pb tiles in SCMX %i coef %9.7f ", nr, coef));
+ AliDebug(ndeb,Form(" PbInTrd1 Ver. 0.1 : was tested."));
+}
+
// 3-feb-05
void AliEMCALv0::Scm0InTrd2(const AliEMCALGeometry * g, const Double_t emodPar[5], Double_t parSCM0[5])
{
// Passive material inside the detector
double wallThickness = g->GetPhiModuleSize()/2. - g->GetPhiTileSize(); //Need check
- printf(" wall thickness %7.5f \n", wallThickness);
+ AliDebug(2,Form(" wall thickness %7.5f \n", wallThickness));
for(int i=0; i<4; i++) { // on pictures sometimes I can not see 0 -> be carefull!!
parSCM0[i] = emodPar[i] - wallThickness;
- printf(" %i parSCMO %7.3f emodPar %7.3f : dif %7.3f \n", i, parSCM0[i],emodPar[i], parSCM0[i]-emodPar[i]);
+ AliDebug(2,Form(" %i parSCMO %7.3f emodPar %7.3f : dif %7.3f \n",
+ i, parSCM0[i],emodPar[i], parSCM0[i]-emodPar[i]));
}
parSCM0[4] = emodPar[4];
gMC->Gsvolu("SCM0", "TRD2", fIdTmedArr[kIdSC], parSCM0, 5); // kIdAIR -> kIdSC
parTRAP[8] = parSCM0[1]; // BL2
parTRAP[9] = parTRAP[8]; // TL2
parTRAP[10]= 0.0; // ALP2
- printf(" ** SCMY ** \n");
- for(int i=0; i<11; i++) printf(" par[%2.2i] %9.4f\n", i, parTRAP[i]);
+ AliDebug(2,Form(" ** SCMY ** \n"));
+ for(int i=0; i<11; i++) AliDebug(2,Form(" par[%2.2i] %9.4f\n", i, parTRAP[i]));
fIdRotm=0;
gMC->Gsvolu("SCMY", "TRAP", fIdTmedArr[kIdSC], parTRAP, 11); // kIdAIR -> kIdSC
ypos = +(parTRAP[3]+parTRAP[7])/2.; //
- printf(" Y shift SCMY inside SCM0 : %7.3f : opt %s\n", ypos, overLapFlagSCMY.Data());
+ AliDebug(2,Form(" Y shift SCMY inside SCM0 : %7.3f : opt %s\n", ypos, overLapFlagSCMY.Data()));
gMC->Gspos("SCMY", 1, "SCM0", 0.0, ypos, 0.0, fIdRotm, overLapFlagSCMY.Data()) ;
// Rotation SCMY around z-axis on 180 degree; x'=-x; y'=-y and z=z
AliMatrix(fIdRotm, 90.0,180., 90.0, 270.0, 0.0,0.0) ;
parTRAP[8] = parSCM0[1]/2; // BL2
parTRAP[9] = parTRAP[8]; // TL2
parTRAP[10]= 0.0; // ALP2
- printf(" ** SCMX ** \n");
- for(int i=0; i<11; i++) printf(" par[%2.2i] %9.4f\n", i, parTRAP[i]);
+ AliDebug(2,Form(" ** SCMX ** \n"));
+ for(int i=0; i<11; i++) AliDebug(2,Form(" par[%2.2i] %9.4f\n", i, parTRAP[i]));
fIdRotm=0;
gMC->Gsvolu("SCMX", "TRAP", fIdTmedArr[kIdSC], parTRAP, 11);
xpos = (parTRAP[4]+parTRAP[8])/2.;
- printf(" X shift SCMX inside SCMX : %7.3f : opt %s\n", xpos, overLapFlagSCMX.Data());
+ AliDebug(2,Form(" X shift SCMX inside SCMX : %7.3f : opt %s\n", xpos, overLapFlagSCMX.Data()));
gMC->Gspos("SCMX", 1, "SCMY", xpos, 0.0, 0.0, fIdRotm, overLapFlagSCMX.Data()) ;
// AliMatrix(fIdRotm, 90.0,270., 90.0, 0.0, 0.0,0.0); // x'=-y; y'=x; z'=z
AliMatrix(fIdRotm, 90.0,90., 90.0, -180.0, 0.0,0.0); // x'=y; y'=-x; z'=z
if(name == "SCMX") { // common trapezoid - 11 parameters
double coef = (parTRAP[8] - parTRAP[4]) / (2.*parTRAP[0]);
double xCenterSCMX = (parTRAP[4] + parTRAP[8])/2.; // the same for y
- printf(" xCenterSCMX %8.5f : coef %8.7f \n", xCenterSCMX, coef);
+ AliDebug(2,Form(" xCenterSCMX %8.5f : coef %8.7f \n", xCenterSCMX, coef));
par[2] = g->GetECPbRadThick()/2.; // z
for(int iz=0; iz<g->GetNECLayers(); iz++){
xpos = ypos = par[0] - xCenterSCMX;
//if(parTRAP[1] < 0.) xpos = -xpos;
gMC->Gsposp("PBTI", ++nr, name.Data(), xpos, ypos, zpos, 0, "ONLY", par, 3) ;
- printf(" %2.2i xpos %8.5f zpos %6.3f par[0,1] %6.3f |", iz+1, xpos, zpos, par[0]);
- if(iz%2>0) printf("\n");
+ AliDebug(2,Form(" %2.2i xpos %8.5f zpos %6.3f par[0,1] %6.3f |", iz+1, xpos, zpos, par[0]));
+ if(iz%2>0) AliDebug(2,Form("\n"));
zpos += fSampleWidth;
}
- printf(" Number of Pb tiles in SCMX %i coef %9.7f \n", nr, coef);
- printf(" par[1] %9.5f par[2] %9.5f ypos %9.5f \n", par[1], par[2], ypos);
+ AliDebug(2,Form(" Number of Pb tiles in SCMX %i coef %9.7f \n", nr, coef));
+ AliDebug(2,Form(" par[1] %9.5f par[2] %9.5f ypos %9.5f \n", par[1], par[2], ypos));
} else if(name == "SCM0") { // 1-mar-05 ; TRD2 - 5 parameters
- printf(" SCM0 par = ");
- for(int i=0; i<5; i++) printf(" %9.5f ", parTRAP[i]);
- printf("\n zpos %f \n",zpos);
+ AliDebug(2,Form(" SCM0 par = "));
+ for(int i=0; i<5; i++) AliDebug(2,Form(" %9.5f ", parTRAP[i]));
+ AliDebug(2,Form("\n zpos %f \n",zpos));
double tanx = (parTRAP[1] - parTRAP[0]) / (2.*parTRAP[4]); // tanx = tany now
double tany = (parTRAP[3] - parTRAP[2]) / (2.*parTRAP[4]), ztmp=0.;
parPB[2] = parTRAP[2] + tany*ztmp;
parPB[3] = parPB[2] + tany*g->GetECPbRadThick();
gMC->Gsposp("PBTI", ++nr, name.Data(), xpos, ypos, zpos, 0, pbtiChonly.Data(), parPB, 5) ;
- printf("\n PBTI %2i | zpos %6.3f | par = ", nr, zpos);
+ AliDebug(2,Form("\n PBTI %2i | zpos %6.3f | par = ", nr, zpos));
/*
for(int i=0; i<5; i++) printf(" %9.5f ", parPB[i]);
// individual SC tile
*/
zpos += fSampleWidth;
}
- printf("\n");
+ AliDebug(2,Form("\n"));
}
Info("PbInTrapForTrd2", "Ver. 0.03 : was tested.");
}
// Pb inside Trd2
Info("PbmoInTrd2"," started : geometry %s ", g->GetName());
double wallThickness = g->GetPhiModuleSize()/2. - g->GetPhiTileSize();
- printf(" wall thickness %7.5f \n", wallThickness);
+ AliDebug(2,Form(" wall thickness %7.5f \n", wallThickness));
for(int i=0; i<4; i++) {
parPBMO[i] = emodPar[i] - wallThickness;
- printf(" %i parPBMO %7.3f emodPar %7.3f : dif %7.3f \n",
- i, parPBMO[i],emodPar[i], parPBMO[i]-emodPar[i]);
+ AliDebug(2,Form(" %i parPBMO %7.3f emodPar %7.3f : dif %7.3f \n",
+ i, parPBMO[i],emodPar[i], parPBMO[i]-emodPar[i]));
}
parPBMO[4] = emodPar[4];
gMC->Gsvolu("PBMO", "TRD2", fIdTmedArr[kIdPB], parPBMO, 5);
// Division
if(g->GetNPHIdiv()==2 && g->GetNETAdiv()==2) {
Division2X2InPbmo(g, parPBMO);
- printf(" PBMO, division 2X2 | geometry |%s|\n", g->GetName());
+ AliDebug(2,Form(" PBMO, division 2X2 | geometry |%s|\n", g->GetName()));
} else {
- printf(" no division PBMO in this geometry |%s|\n", g->GetName());
+ AliDebug(2,Form(" no division PBMO in this geometry |%s|\n", g->GetName()));
assert(0);
}
}
double tany = (parPBMO[3] - parPBMO[2]) / (2.*parPBMO[4]);
char name[10], named[10], named2[10];
- printf(" PBMO par = ");
- for(int i=0; i<5; i++) printf(" %9.5f ", parPBMO[i]);
- printf("\n");
+ AliDebug(2,Form(" PBMO par = "));
+ for(int i=0; i<5; i++) AliDebug(2,Form(" %9.5f ", parPBMO[i]));
+ AliDebug(2,Form("\n"));
parSC[2] = g->GetECScintThick()/2.;
zpos = -fSampleWidth*g->GetNECLayers()/2. + g->GetECPbRadThick() + g->GetECScintThick()/2.;
- printf(" parSC[2] %9.5f \n", parSC[2]);
+ AliDebug(2,Form(" parSC[2] %9.5f \n", parSC[2]));
for(int iz=0; iz<g->GetNECLayers(); iz++){
ztmp = g->GetECPbRadThick() + fSampleWidth*double(iz); // Z for previous PB
parSC[0] = parPBMO[0] + tanx*ztmp;
sprintf(name,"SC%2.2i", iz+1);
gMC->Gsvolu(name, "BOX", fIdTmedArr[kIdSC], parSC, 3);
gMC->Gspos(name, 1, "PBMO", xpos, ypos, zpos, 0, "ONLY") ;
- printf("%s | zpos %6.3f | parSC[0,1]=(%7.5f,%7.5f) -> ",
- name, zpos, parSC[0], parSC[1]);
+ AliDebug(2,Form("%s | zpos %6.3f | parSC[0,1]=(%7.5f,%7.5f) -> ",
+ name, zpos, parSC[0], parSC[1]));
sprintf(named,"SY%2.2i", iz+1);
printf(" %s -> ", named);
}
return trd1;
}
+
+//_____________________________________________________________________________
+void AliEMCALv0::AddAlignableVolumes() const
+{
+ //
+ // Create entries for alignable volumes associating the symbolic volume
+ // name with the corresponding volume path. Needs to be synchronized with
+ // eventual changes in the geometry.
+ //
+
+ TString vpstr1 = "ALIC_1/XEN1_1/SMOD_";
+ TString snstr1 = "EMCAL/FullSupermodule";
+ TString volpath, symname;
+
+ //Int_t nSMod = ((AliEMCALGeometry*)GetGeometry())->GetNumberOfSuperModules();
+ //could use this, but what happens if it is > 10?
+
+ for (Int_t smodnum=0; smodnum < 10; smodnum++) {
+ symname = snstr1;
+ symname += (smodnum+1);
+ volpath = vpstr1;
+ volpath += (smodnum+1);
+ if(!gGeoManager->SetAlignableEntry(symname.Data(),volpath.Data()))
+ AliFatal("Unable to set alignable entry!!");
+ }
+
+ if(GetGeometry()->GetKey110DEG()) {
+ TString vpstr2 = "ALIC_1/XEN1_1/SM10_";
+ TString snstr2 = "EMCAL/HalfSupermodule";
+ for (Int_t smodnum=0; smodnum < 2; smodnum++) {
+ symname = snstr2;
+ symname += (smodnum+1);
+ volpath = vpstr2;
+ volpath += (smodnum+1);
+ if(!gGeoManager->SetAlignableEntry(symname.Data(),volpath.Data()))
+ AliFatal("Unable to set alignable entry!!");
+ }
+ }
+
+}
+