(gAlice->GetModule("PHOS")) ;
if ( phostmp == NULL ) {
@@ -635,82 +361,62 @@ void AliPHOSv0::CreateGeometry()
return;
}
+
+ AliPHOSGeometry * geom = GetGeometry() ;
+
// Get pointer to the array containing media indeces
Int_t *idtmed = fIdtmed->GetArray() - 699 ;
- // Create a box a PHOS module.
- // In case of MIXT geometry 2 different boxes are needed
-
- Float_t bigbox[3] ;
- bigbox[0] = fGeom->GetOuterBoxSize(0) / 2.0 ;
- bigbox[1] = ( fGeom->GetOuterBoxSize(1) + fGeom->GetCPVBoxSize(1) ) / 2.0 ;
- bigbox[2] = fGeom->GetOuterBoxSize(2) / 2.0 ;
+ // Create a PHOS module.
- gMC->Gsvolu("PHOS", "BOX ", idtmed[798], bigbox, 3) ;
-
- if ( strcmp( fGeom->GetName(),"MIXT") == 0 && fGeom->GetNPPSDModules() > 0)
- gMC->Gsvolu("PHO1", "BOX ", idtmed[798], bigbox, 3) ;
+ gMC->Gsvolu("PHOS", "TRD1", idtmed[798], geom->GetPHOSParams(), 4) ;
- this->CreateGeometryforPHOS() ;
- if ( strcmp( fGeom->GetName(), "GPS2") == 0 )
- this->CreateGeometryforPPSD() ;
- else if ( strcmp( fGeom->GetName(), "IHEP") == 0 )
- this->CreateGeometryforCPV() ;
- else if ( strcmp( fGeom->GetName(), "MIXT") == 0 ) {
- this->CreateGeometryforPPSD() ;
- this->CreateGeometryforCPV() ;
- }
- else
- cout << "AliPHOSv0::CreateGeometry : no charged particle identification system installed" << endl;
+ this->CreateGeometryforEMC() ;
+ if (strstr(fTitle.Data(),"noCPV") == 0)
+ this->CreateGeometryforCPV() ;
+
this->CreateGeometryforSupport() ;
// --- Position PHOS mdules in ALICE setup ---
-
Int_t idrotm[99] ;
- Double_t const kRADDEG = 180.0 / kPI ;
-
- Int_t lastModule;
- if (strcmp(fGeom->GetName(),"MIXT") == 0)
- lastModule = fGeom->GetNModules() - fGeom->GetNPPSDModules();
- else
- lastModule = fGeom->GetNModules();
-
- Int_t i;
- for( i = 1; i <= lastModule ; i++ ) {
+ Int_t iXYZ,iAngle;
+ char im[5] ;
+ Bool_t anyModuleCreated=0 ;
+ for (Int_t iModule = 0; iModule < 5 ; iModule++ ) {
+ sprintf(im,"%d",iModule+1) ;
+ if(strstr(GetTitle(),im)==0 && strcmp(GetTitle(),"IHEP")!=0 && strcmp(GetTitle(),"noCPV")!=0)
+ continue ;
+ anyModuleCreated=1 ;
+ Float_t angle[3][2];
+ for (iXYZ=0; iXYZ<3; iXYZ++)
+ for (iAngle=0; iAngle<2; iAngle++)
+ angle[iXYZ][iAngle] = geom->GetModuleAngle(iModule,iXYZ, iAngle);
+ AliMatrix(idrotm[iModule],
+ angle[0][0],angle[0][1],
+ angle[1][0],angle[1][1],
+ angle[2][0],angle[2][1]) ;
- Float_t angle = fGeom->GetPHOSAngle(i) ;
- AliMatrix(idrotm[i-1], 90.0, angle, 90.0, 90.0+angle, 0.0, 0.0) ;
-
- Float_t r = fGeom->GetIPtoOuterCoverDistance() + ( fGeom->GetOuterBoxSize(1) + fGeom->GetCPVBoxSize(1) ) / 2.0 ;
-
- Float_t xP1 = r * TMath::Sin( angle / kRADDEG ) ;
- Float_t yP1 = -r * TMath::Cos( angle / kRADDEG ) ;
-
- gMC->Gspos("PHOS", i, "ALIC", xP1, yP1, 0.0, idrotm[i-1], "ONLY") ;
-
- } // for GetNModules
-
- for( i = lastModule+1; i <= fGeom->GetNModules(); i++ ) {
-
- Float_t angle = fGeom->GetPHOSAngle(i) ;
- AliMatrix(idrotm[i-1], 90.0, angle, 90.0, 90.0+angle, 0.0, 0.0) ;
-
- Float_t r = fGeom->GetIPtoOuterCoverDistance() + ( fGeom->GetOuterBoxSize(1) + fGeom->GetCPVBoxSize(1) ) / 2.0 ;
-
- Float_t xP1 = r * TMath::Sin( angle / kRADDEG ) ;
- Float_t yP1 = -r * TMath::Cos( angle / kRADDEG ) ;
-
- gMC->Gspos("PHO1", i-lastModule, "ALIC", xP1, yP1, 0.0, idrotm[i-1], "ONLY") ;
-
- } // for GetNModules
-
+ Float_t pos[3];
+ for (iXYZ=0; iXYZ<3; iXYZ++)
+ pos[iXYZ] = geom->GetModuleCenter(iModule,iXYZ);
+ gMC->Gspos("PHOS", iModule+1, "ALIC", pos[0], pos[1], pos[2],
+ idrotm[iModule], "ONLY") ;
+ }
+ if(!anyModuleCreated)
+ AliError("No one PHOS module was created") ;
}
//____________________________________________________________________________
-void AliPHOSv0::CreateGeometryforPHOS()
+void AliPHOSv0::CreateGeometryforEMC()
{
// Create the PHOS-EMC geometry for GEANT
+ // Author: Dmitri Peressounko August 2001
+ // The used coordinate system:
+ // 1. in Module: X along longer side, Y out of beam, Z along shorter side (along beam)
+ // 2. In Strip the same: X along longer side, Y out of beam, Z along shorter side (along beam)
+
+
//BEGIN_HTML
/*
@@ -725,463 +431,222 @@ void AliPHOSv0::CreateGeometryforPHOS()
// Get pointer to the array containing media indexes
Int_t *idtmed = fIdtmed->GetArray() - 699 ;
- // ---
- // --- Define PHOS box volume, fPUFPill with thermo insulating foam ---
- // --- Foam Thermo Insulating outer cover dimensions ---
- // --- Put it in bigbox = PHOS
+ AliPHOSGeometry * geom = GetGeometry() ;
+ AliPHOSEMCAGeometry * emcg = geom->GetEMCAGeometry() ;
- Float_t dphos[3] ;
- dphos[0] = fGeom->GetOuterBoxSize(0) / 2.0 ;
- dphos[1] = fGeom->GetOuterBoxSize(1) / 2.0 ;
- dphos[2] = fGeom->GetOuterBoxSize(2) / 2.0 ;
+ // ======= Define the strip ===============
- gMC->Gsvolu("PEMC", "BOX ", idtmed[706], dphos, 3) ;
-
- Float_t yO = - fGeom->GetCPVBoxSize(1) / 2.0 ;
-
- gMC->Gspos("PEMC", 1, "PHOS", 0.0, yO, 0.0, 0, "ONLY") ;
- if ( strcmp( fGeom->GetName(),"MIXT") == 0 && fGeom->GetNPPSDModules() > 0)
- gMC->Gspos("PEMC", 1, "PHO1", 0.0, yO, 0.0, 0, "ONLY") ;
-
- // ---
- // --- Define Textolit Wall box, position inside PEMC ---
- // --- Textolit Wall box dimentions ---
-
-
- Float_t dptxw[3];
- dptxw[0] = fGeom->GetTextolitBoxSize(0) / 2.0 ;
- dptxw[1] = fGeom->GetTextolitBoxSize(1) / 2.0 ;
- dptxw[2] = fGeom->GetTextolitBoxSize(2) / 2.0 ;
-
- gMC->Gsvolu("PTXW", "BOX ", idtmed[707], dptxw, 3);
-
- yO = ( fGeom->GetOuterBoxThickness(1) - fGeom->GetUpperPlateThickness() ) / 2. ;
+ gMC->Gsvolu("PSTR", "BOX ", idtmed[716], emcg->GetStripHalfSize(), 3) ; //Made of steel
- gMC->Gspos("PTXW", 1, "PEMC", 0.0, yO, 0.0, 0, "ONLY") ;
+ // --- define steel volume (cell of the strip unit)
+// gMC->Gsvolu("PCEL", "BOX ", idtmed[798], emcg->GetSteelCellHalfSize(), 3);
+ gMC->Gsvolu("PCEL", "BOX ", idtmed[798], emcg->GetAirCellHalfSize(), 3);
- // ---
- // --- Define Upper Polystyrene Foam Plate, place inside PTXW ---
- // --- immediately below Foam Thermo Insulation Upper plate ---
-
- // --- Upper Polystyrene Foam plate thickness ---
-
- Float_t dpufp[3] ;
- dpufp[0] = fGeom->GetTextolitBoxSize(0) / 2.0 ;
- dpufp[1] = fGeom->GetSecondUpperPlateThickness() / 2. ;
- dpufp[2] = fGeom->GetTextolitBoxSize(2) /2.0 ;
+ // --- define wrapped crystal and put it into steel cell
- gMC->Gsvolu("PUFP", "BOX ", idtmed[703], dpufp, 3) ;
-
- yO = ( fGeom->GetTextolitBoxSize(1) - fGeom->GetSecondUpperPlateThickness() ) / 2.0 ;
-
- gMC->Gspos("PUFP", 1, "PTXW", 0.0, yO, 0.0, 0, "ONLY") ;
-
- // ---
- // --- Define air-filled box, place inside PTXW ---
- // --- Inner AIR volume dimensions ---
+ gMC->Gsvolu("PWRA", "BOX ", idtmed[702], emcg->GetWrappedHalfSize(), 3);
+ Float_t * pin = emcg->GetAPDHalfSize() ;
+ Float_t * preamp = emcg->GetPreampHalfSize() ;
+ Float_t y = (emcg->GetAirGapLed()-2*pin[1]-2*preamp[1])/2;
+ gMC->Gspos("PWRA", 1, "PCEL", 0.0, y, 0.0, 0, "ONLY") ;
+
+ // --- Define crystal and put it into wrapped crystall ---
+ gMC->Gsvolu("PXTL", "BOX ", idtmed[699], emcg->GetCrystalHalfSize(), 3) ;
+ gMC->Gspos("PXTL", 1, "PWRA", 0.0, 0.0, 0.0, 0, "ONLY") ;
+
+ // --- define APD/PIN preamp and put it into AirCell
-
- Float_t dpair[3] ;
- dpair[0] = fGeom->GetAirFilledBoxSize(0) / 2.0 ;
- dpair[1] = fGeom->GetAirFilledBoxSize(1) / 2.0 ;
- dpair[2] = fGeom->GetAirFilledBoxSize(2) / 2.0 ;
-
- gMC->Gsvolu("PAIR", "BOX ", idtmed[798], dpair, 3) ;
-
- yO = ( fGeom->GetTextolitBoxSize(1) - fGeom->GetAirFilledBoxSize(1) ) / 2.0 - fGeom->GetSecondUpperPlateThickness() ;
-
- gMC->Gspos("PAIR", 1, "PTXW", 0.0, yO, 0.0, 0, "ONLY") ;
-
-// --- Dimensions of PbWO4 crystal ---
-
- Float_t xtlX = fGeom->GetCrystalSize(0) ;
- Float_t xtlY = fGeom->GetCrystalSize(1) ;
- Float_t xtlZ = fGeom->GetCrystalSize(2) ;
-
- Float_t dptcb[3] ;
- dptcb[0] = fGeom->GetNPhi() * ( xtlX + 2 * fGeom->GetGapBetweenCrystals() ) / 2.0 + fGeom->GetModuleBoxThickness() ;
- dptcb[1] = ( xtlY + fGeom->GetCrystalSupportHeight() + fGeom->GetCrystalWrapThickness() + fGeom->GetCrystalHolderThickness() ) / 2.0
- + fGeom->GetModuleBoxThickness() / 2.0 ;
- dptcb[2] = fGeom->GetNZ() * ( xtlZ + 2 * fGeom->GetGapBetweenCrystals() ) / 2.0 + fGeom->GetModuleBoxThickness() ;
-
- gMC->Gsvolu("PTCB", "BOX ", idtmed[706], dptcb, 3) ;
-
- yO = fGeom->GetAirFilledBoxSize(1) / 2.0 - dptcb[1]
- - ( fGeom->GetIPtoCrystalSurface() - fGeom->GetIPtoOuterCoverDistance() - fGeom->GetModuleBoxThickness()
- - fGeom->GetUpperPlateThickness() - fGeom->GetSecondUpperPlateThickness() ) ;
-
- gMC->Gspos("PTCB", 1, "PAIR", 0.0, yO, 0.0, 0, "ONLY") ;
-
- // ---
- // --- Define Crystal BLock filled with air, position it inside PTCB ---
- Float_t dpcbl[3] ;
-
- dpcbl[0] = fGeom->GetNPhi() * ( xtlX + 2 * fGeom->GetGapBetweenCrystals() ) / 2.0 ;
- dpcbl[1] = ( xtlY + fGeom->GetCrystalSupportHeight() + fGeom->GetCrystalWrapThickness() + fGeom->GetCrystalHolderThickness() ) / 2.0 ;
- dpcbl[2] = fGeom->GetNZ() * ( xtlZ + 2 * fGeom->GetGapBetweenCrystals() ) / 2.0 ;
-
- gMC->Gsvolu("PCBL", "BOX ", idtmed[798], dpcbl, 3) ;
-
- // --- Divide PCBL in X (phi) and Z directions --
- gMC->Gsdvn("PROW", "PCBL", Int_t (fGeom->GetNPhi()), 1) ;
- gMC->Gsdvn("PCEL", "PROW", Int_t (fGeom->GetNZ()), 3) ;
-
- yO = -fGeom->GetModuleBoxThickness() / 2.0 ;
-
- gMC->Gspos("PCBL", 1, "PTCB", 0.0, yO, 0.0, 0, "ONLY") ;
-
- // ---
- // --- Define STeel (actually, it's titanium) Cover volume, place inside PCEL
- Float_t dpstc[3] ;
-
- dpstc[0] = ( xtlX + 2 * fGeom->GetCrystalWrapThickness() ) / 2.0 ;
- dpstc[1] = ( xtlY + fGeom->GetCrystalSupportHeight() + fGeom->GetCrystalWrapThickness() + fGeom->GetCrystalHolderThickness() ) / 2.0 ;
- dpstc[2] = ( xtlZ + 2 * fGeom->GetCrystalWrapThickness() + 2 * fGeom->GetCrystalHolderThickness() ) / 2.0 ;
-
- gMC->Gsvolu("PSTC", "BOX ", idtmed[704], dpstc, 3) ;
-
- gMC->Gspos("PSTC", 1, "PCEL", 0.0, 0.0, 0.0, 0, "ONLY") ;
-
- // ---
- // --- Define Tyvek volume, place inside PSTC ---
- Float_t dppap[3] ;
-
- dppap[0] = xtlX / 2.0 + fGeom->GetCrystalWrapThickness() ;
- dppap[1] = ( xtlY + fGeom->GetCrystalSupportHeight() + fGeom->GetCrystalWrapThickness() ) / 2.0 ;
- dppap[2] = xtlZ / 2.0 + fGeom->GetCrystalWrapThickness() ;
-
- gMC->Gsvolu("PPAP", "BOX ", idtmed[702], dppap, 3) ;
-
- yO = ( xtlY + fGeom->GetCrystalSupportHeight() + fGeom->GetCrystalWrapThickness() ) / 2.0
- - ( xtlY + fGeom->GetCrystalSupportHeight() + fGeom->GetCrystalWrapThickness() + fGeom->GetCrystalHolderThickness() ) / 2.0 ;
+ gMC->Gsvolu("PPIN", "BOX ", idtmed[705], emcg->GetAPDHalfSize(), 3) ;
+ Float_t * crystal = emcg->GetCrystalHalfSize() ;
+ y = crystal[1] + emcg->GetAirGapLed() /2 - preamp[1];
+ gMC->Gspos("PPIN", 1, "PCEL", 0.0, y, 0.0, 0, "ONLY") ;
+
+ gMC->Gsvolu("PREA", "BOX ", idtmed[711], emcg->GetPreampHalfSize(), 3) ; // Here I assumed preamp
+ // as a printed Circuit
+ y = crystal[1] + emcg->GetAirGapLed() /2 + pin[1] ; // May it should be changed
+ gMC->Gspos("PREA", 1, "PCEL", 0.0, y, 0.0, 0, "ONLY") ; // to ceramics?
- gMC->Gspos("PPAP", 1, "PSTC", 0.0, yO, 0.0, 0, "ONLY") ;
-
- // ---
- // --- Define PbWO4 crystal volume, place inside PPAP ---
- Float_t dpxtl[3] ;
-
- dpxtl[0] = xtlX / 2.0 ;
- dpxtl[1] = xtlY / 2.0 ;
- dpxtl[2] = xtlZ / 2.0 ;
-
- gMC->Gsvolu("PXTL", "BOX ", idtmed[699], dpxtl, 3) ;
-
- yO = ( xtlY + fGeom->GetCrystalSupportHeight() + fGeom->GetCrystalWrapThickness() ) / 2.0 - xtlY / 2.0 - fGeom->GetCrystalWrapThickness() ;
-
- gMC->Gspos("PXTL", 1, "PPAP", 0.0, yO, 0.0, 0, "ONLY") ;
-
- // ---
- // --- Define crystal support volume, place inside PPAP ---
- Float_t dpsup[3] ;
-
- dpsup[0] = xtlX / 2.0 + fGeom->GetCrystalWrapThickness() ;
- dpsup[1] = fGeom->GetCrystalSupportHeight() / 2.0 ;
- dpsup[2] = xtlZ / 2.0 + fGeom->GetCrystalWrapThickness() ;
-
- gMC->Gsvolu("PSUP", "BOX ", idtmed[798], dpsup, 3) ;
-
- yO = fGeom->GetCrystalSupportHeight() / 2.0 - ( xtlY + fGeom->GetCrystalSupportHeight() + fGeom->GetCrystalWrapThickness() ) / 2.0 ;
- gMC->Gspos("PSUP", 1, "PPAP", 0.0, yO, 0.0, 0, "ONLY") ;
+ // --- Fill strip with wrapped cristals in steel cells
- // ---
- // --- Define PIN-diode volume and position it inside crystal support ---
- // --- right behind PbWO4 crystal
-
- // --- PIN-diode dimensions ---
-
-
- Float_t dppin[3] ;
- dppin[0] = fGeom->GetPinDiodeSize(0) / 2.0 ;
- dppin[1] = fGeom->GetPinDiodeSize(1) / 2.0 ;
- dppin[2] = fGeom->GetPinDiodeSize(2) / 2.0 ;
-
- gMC->Gsvolu("PPIN", "BOX ", idtmed[705], dppin, 3) ;
-
- yO = fGeom->GetCrystalSupportHeight() / 2.0 - fGeom->GetPinDiodeSize(1) / 2.0 ;
-
- gMC->Gspos("PPIN", 1, "PSUP", 0.0, yO, 0.0, 0, "ONLY") ;
-
- // ---
- // --- Define Upper Cooling Panel, place it on top of PTCB ---
- Float_t dpucp[3] ;
- // --- Upper Cooling Plate thickness ---
-
- dpucp[0] = dptcb[0] ;
- dpucp[1] = fGeom->GetUpperCoolingPlateThickness() ;
- dpucp[2] = dptcb[2] ;
-
- gMC->Gsvolu("PUCP", "BOX ", idtmed[701], dpucp,3) ;
-
- yO = fGeom->GetAirFilledBoxSize(1) / 2.
- -( fGeom->GetIPtoCrystalSurface() - fGeom->GetIPtoOuterCoverDistance() - fGeom->GetModuleBoxThickness()
- -fGeom->GetUpperPlateThickness() - fGeom->GetSecondUpperPlateThickness() - fGeom->GetUpperCoolingPlateThickness() ) ;
-
- gMC->Gspos("PUCP", 1, "PAIR", 0.0, yO, 0.0, 0, "ONLY") ;
-
- // ---
- // --- Define Al Support Plate, position it inside PAIR ---
- // --- right beneath PTCB ---
- // --- Al Support Plate thickness ---
-
- Float_t dpasp[3] ;
- dpasp[0] = fGeom->GetAirFilledBoxSize(0) / 2.0 ;
- dpasp[1] = fGeom->GetSupportPlateThickness() / 2.0 ;
- dpasp[2] = fGeom->GetAirFilledBoxSize(2) / 2.0 ;
-
- gMC->Gsvolu("PASP", "BOX ", idtmed[701], dpasp, 3) ;
-
- yO = ( fGeom->GetAirFilledBoxSize(1) - fGeom->GetSupportPlateThickness() ) / 2.
- - ( fGeom->GetIPtoCrystalSurface() - fGeom->GetIPtoOuterCoverDistance()
- - fGeom->GetUpperPlateThickness() - fGeom->GetSecondUpperPlateThickness() + dpcbl[1] * 2 ) ;
-
- gMC->Gspos("PASP", 1, "PAIR", 0.0, yO, 0.0, 0, "ONLY") ;
-
- // ---
- // --- Define Thermo Insulating Plate, position it inside PAIR ---
- // --- right beneath PASP ---
- // --- Lower Thermo Insulating Plate thickness ---
-
- Float_t dptip[3] ;
- dptip[0] = fGeom->GetAirFilledBoxSize(0) / 2.0 ;
- dptip[1] = fGeom->GetLowerThermoPlateThickness() / 2.0 ;
- dptip[2] = fGeom->GetAirFilledBoxSize(2) / 2.0 ;
+ Float_t* splate = emcg->GetSupportPlateHalfSize();
+ y = -splate[1] ;
+// Float_t* acel = emcg->GetSteelCellHalfSize() ;
+ Float_t* acel = emcg->GetAirCellHalfSize() ;
- gMC->Gsvolu("PTIP", "BOX ", idtmed[706], dptip, 3) ;
-
- yO = ( fGeom->GetAirFilledBoxSize(1) - fGeom->GetLowerThermoPlateThickness() ) / 2.
- - ( fGeom->GetIPtoCrystalSurface() - fGeom->GetIPtoOuterCoverDistance() - fGeom->GetUpperPlateThickness()
- - fGeom->GetSecondUpperPlateThickness() + dpcbl[1] * 2 + fGeom->GetSupportPlateThickness() ) ;
-
- gMC->Gspos("PTIP", 1, "PAIR", 0.0, yO, 0.0, 0, "ONLY") ;
-
- // ---
- // --- Define Textolit Plate, position it inside PAIR ---
- // --- right beneath PTIP ---
- // --- Lower Textolit Plate thickness ---
-
- Float_t dptxp[3] ;
- dptxp[0] = fGeom->GetAirFilledBoxSize(0) / 2.0 ;
- dptxp[1] = fGeom->GetLowerTextolitPlateThickness() / 2.0 ;
- dptxp[2] = fGeom->GetAirFilledBoxSize(2) / 2.0 ;
-
- gMC->Gsvolu("PTXP", "BOX ", idtmed[707], dptxp, 3) ;
-
- yO = ( fGeom->GetAirFilledBoxSize(1) - fGeom->GetLowerTextolitPlateThickness() ) / 2.
- - ( fGeom->GetIPtoCrystalSurface() - fGeom->GetIPtoOuterCoverDistance() - fGeom->GetUpperPlateThickness()
- - fGeom->GetSecondUpperPlateThickness() + dpcbl[1] * 2 + fGeom->GetSupportPlateThickness()
- + fGeom->GetLowerThermoPlateThickness() ) ;
-
- gMC->Gspos("PTXP", 1, "PAIR", 0.0, yO, 0.0, 0, "ONLY") ;
-
-}
+ for(Int_t lev = 2, icel = 1; icel <= emcg->GetNCellsXInStrip()*emcg->GetNCellsZInStrip(); icel += 2, lev += 2){
+ Float_t x = (2*(lev / 2) - 1 - emcg->GetNCellsXInStrip())* acel[0] ;
+ Float_t z = acel[2];
+ gMC->Gspos("PCEL", icel, "PSTR", x, y, +z, 0, "ONLY") ;
+ gMC->Gspos("PCEL", icel + 1, "PSTR", x, y, -z, 0, "ONLY") ;
+ }
-//____________________________________________________________________________
-void AliPHOSv0::CreateGeometryforPPSD()
-{
- // Create the PHOS-PPSD geometry for GEANT
- //BEGIN_HTML
- /*
-
- Geant3 geometry tree of PHOS-PPSD in ALICE
-
-
-
-
- */
- //END_HTML
+ // --- define the support plate, hole in it and position it in strip ----
+ gMC->Gsvolu("PSUP", "BOX ", idtmed[701], emcg->GetSupportPlateHalfSize(), 3) ;
- // Get pointer to the array containing media indexes
- Int_t *idtmed = fIdtmed->GetArray() - 699 ;
-
- // The box containing all ppsd's for one PHOS module filled with air
- Float_t ppsd[3] ;
- ppsd[0] = fGeom->GetCPVBoxSize(0) / 2.0 ;
- ppsd[1] = fGeom->GetCPVBoxSize(1) / 2.0 ;
- ppsd[2] = fGeom->GetCPVBoxSize(2) / 2.0 ;
+ gMC->Gsvolu("PSHO", "BOX ", idtmed[798], emcg->GetSupportPlateInHalfSize(), 3) ;
+ Float_t z = emcg->GetSupportPlateThickness()/2 ;
+ gMC->Gspos("PSHO", 1, "PSUP", 0.0, 0.0, z, 0, "ONLY") ;
- gMC->Gsvolu("PPSD", "BOX ", idtmed[798], ppsd, 3) ;
+ y = acel[1] ;
+ gMC->Gspos("PSUP", 1, "PSTR", 0.0, y, 0.0, 0, "ONLY") ;
- Float_t yO = fGeom->GetOuterBoxSize(1) / 2.0 ;
- if ( strcmp( fGeom->GetName(),"MIXT") == 0 && fGeom->GetNPPSDModules() > 0)
- gMC->Gspos("PPSD", 1, "PHO1", 0.0, yO, 0.0, 0, "ONLY") ;
- else
- gMC->Gspos("PPSD", 1, "PHOS", 0.0, yO, 0.0, 0, "ONLY") ;
+ // ========== Fill module with strips and put them into inner thermoinsulation=============
+ gMC->Gsvolu("PTII", "BOX ", idtmed[706], emcg->GetInnerThermoHalfSize(), 3) ;
- // Now we build a micromegas module
- // The box containing the whole module filled with epoxy (FR4)
+ Float_t * inthermo = emcg->GetInnerThermoHalfSize() ;
+ Float_t * strip = emcg->GetStripHalfSize() ;
+ y = inthermo[1] - strip[1] ;
+ Int_t irow;
+ Int_t nr = 1 ;
+ Int_t icol ;
- Float_t mppsd[3] ;
- mppsd[0] = fGeom->GetPPSDModuleSize(0) / 2.0 ;
- mppsd[1] = fGeom->GetPPSDModuleSize(1) / 2.0 ;
- mppsd[2] = fGeom->GetPPSDModuleSize(2) / 2.0 ;
+ for(irow = 0; irow < emcg->GetNStripX(); irow ++){
+ Float_t x = (2*irow + 1 - emcg->GetNStripX())* strip[0] ;
+ for(icol = 0; icol < emcg->GetNStripZ(); icol ++){
+ z = (2*icol + 1 - emcg->GetNStripZ()) * strip[2] ;
+ gMC->Gspos("PSTR", nr, "PTII", x, y, z, 0, "ONLY") ;
+ nr++ ;
+ }
+ }
+
- gMC->Gsvolu("PMPP", "BOX ", idtmed[708], mppsd, 3) ;
-
- // Inside mppsd :
- // 1. The Top Lid made of epoxy (FR4)
+ // ------- define the air gap between thermoinsulation and cooler
+ gMC->Gsvolu("PAGA", "BOX ", idtmed[798], emcg->GetAirGapHalfSize(), 3) ;
+ Float_t * agap = emcg->GetAirGapHalfSize() ;
+ y = agap[1] - inthermo[1] ;
+
+ gMC->Gspos("PTII", 1, "PAGA", 0.0, y, 0.0, 0, "ONLY") ;
- Float_t tlppsd[3] ;
- tlppsd[0] = fGeom->GetPPSDModuleSize(0) / 2.0 ;
- tlppsd[1] = fGeom->GetLidThickness() / 2.0 ;
- tlppsd[2] = fGeom->GetPPSDModuleSize(2) / 2.0 ;
- gMC->Gsvolu("PTLP", "BOX ", idtmed[708], tlppsd, 3) ;
- Float_t y0 = ( fGeom->GetMicromegas1Thickness() - fGeom->GetLidThickness() ) / 2. ;
+ // ------- define the Al passive cooler
+ gMC->Gsvolu("PCOR", "BOX ", idtmed[701], emcg->GetCoolerHalfSize(), 3) ;
+ Float_t * cooler = emcg->GetCoolerHalfSize() ;
+ y = cooler[1] - agap[1] ;
+
+ gMC->Gspos("PAGA", 1, "PCOR", 0.0, y, 0.0, 0, "ONLY") ;
- gMC->Gspos("PTLP", 1, "PMPP", 0.0, y0, 0.0, 0, "ONLY") ;
-
- // 2. the upper panel made of composite material
+ // ------- define the outer thermoinsulating cover
+ gMC->Gsvolu("PTIO", "TRD1", idtmed[706], emcg->GetOuterThermoParams(), 4) ;
+ Float_t * outparams = emcg->GetOuterThermoParams() ;
- Float_t upppsd[3] ;
- upppsd[0] = ( fGeom->GetPPSDModuleSize(0) - fGeom->GetMicromegasWallThickness() ) / 2.0 ;
- upppsd[1] = fGeom->GetCompositeThickness() / 2.0 ;
- upppsd[2] = ( fGeom->GetPPSDModuleSize(2) - fGeom->GetMicromegasWallThickness() ) / 2.0 ;
+ Int_t idrotm[99] ;
+ AliMatrix(idrotm[1], 90.0, 0.0, 0.0, 0.0, 90.0, 270.0) ;
+ // Frame in outer thermoinsulation and so on: z out of beam, y along beam, x across beam
- gMC->Gsvolu("PUPP", "BOX ", idtmed[709], upppsd, 3) ;
-
- y0 = y0 - fGeom->GetLidThickness() / 2. - fGeom->GetCompositeThickness() / 2. ;
-
- gMC->Gspos("PUPP", 1, "PMPP", 0.0, y0, 0.0, 0, "ONLY") ;
-
- // 3. the anode made of Copper
-
- Float_t anppsd[3] ;
- anppsd[0] = ( fGeom->GetPPSDModuleSize(0) - fGeom->GetMicromegasWallThickness() ) / 2.0 ;
- anppsd[1] = fGeom->GetAnodeThickness() / 2.0 ;
- anppsd[2] = ( fGeom->GetPPSDModuleSize(2) - fGeom->GetMicromegasWallThickness() ) / 2.0 ;
-
- gMC->Gsvolu("PANP", "BOX ", idtmed[710], anppsd, 3) ;
-
- y0 = y0 - fGeom->GetCompositeThickness() / 2. - fGeom->GetAnodeThickness() / 2. ;
-
- gMC->Gspos("PANP", 1, "PMPP", 0.0, y0, 0.0, 0, "ONLY") ;
-
- // 4. the conversion gap + avalanche gap filled with gas
-
- Float_t ggppsd[3] ;
- ggppsd[0] = ( fGeom->GetPPSDModuleSize(0) - fGeom->GetMicromegasWallThickness() ) / 2.0 ;
- ggppsd[1] = ( fGeom->GetConversionGap() + fGeom->GetAvalancheGap() ) / 2.0 ;
- ggppsd[2] = ( fGeom->GetPPSDModuleSize(2) - fGeom->GetMicromegasWallThickness() ) / 2.0 ;
-
- gMC->Gsvolu("PGGP", "BOX ", idtmed[715], ggppsd, 3) ;
-
- // --- Divide GGPP in X (phi) and Z directions --
- gMC->Gsdvn("PPRO", "PGGP", fGeom->GetNumberOfPadsPhi(), 1) ;
- gMC->Gsdvn("PPCE", "PPRO", fGeom->GetNumberOfPadsZ() , 3) ;
-
- y0 = y0 - fGeom->GetAnodeThickness() / 2. - ( fGeom->GetConversionGap() + fGeom->GetAvalancheGap() ) / 2. ;
-
- gMC->Gspos("PGGP", 1, "PMPP", 0.0, y0, 0.0, 0, "ONLY") ;
-
-
- // 6. the cathode made of Copper
-
- Float_t cappsd[3] ;
- cappsd[0] = ( fGeom->GetPPSDModuleSize(0) - fGeom->GetMicromegasWallThickness() ) / 2.0 ;
- cappsd[1] = fGeom->GetCathodeThickness() / 2.0 ;
- cappsd[2] = ( fGeom->GetPPSDModuleSize(2) - fGeom->GetMicromegasWallThickness() ) / 2.0 ;
-
- gMC->Gsvolu("PCAP", "BOX ", idtmed[710], cappsd, 3) ;
-
- y0 = y0 - ( fGeom->GetConversionGap() + fGeom->GetAvalancheGap() ) / 2. - fGeom->GetCathodeThickness() / 2. ;
-
- gMC->Gspos("PCAP", 1, "PMPP", 0.0, y0, 0.0, 0, "ONLY") ;
-
- // 7. the printed circuit made of G10
-
- Float_t pcppsd[3] ;
- pcppsd[0] = ( fGeom->GetPPSDModuleSize(0) - fGeom->GetMicromegasWallThickness() ) / 2,.0 ;
- pcppsd[1] = fGeom->GetPCThickness() / 2.0 ;
- pcppsd[2] = ( fGeom->GetPPSDModuleSize(2) - fGeom->GetMicromegasWallThickness() ) / 2.0 ;
-
- gMC->Gsvolu("PCPS", "BOX ", idtmed[711], cappsd, 3) ;
-
- y0 = y0 - fGeom->GetCathodeThickness() / 2. - fGeom->GetPCThickness() / 2. ;
-
- gMC->Gspos("PCPS", 1, "PMPP", 0.0, y0, 0.0, 0, "ONLY") ;
-
- // 8. the lower panel made of composite material
-
- Float_t lpppsd[3] ;
- lpppsd[0] = ( fGeom->GetPPSDModuleSize(0) - fGeom->GetMicromegasWallThickness() ) / 2.0 ;
- lpppsd[1] = fGeom->GetCompositeThickness() / 2.0 ;
- lpppsd[2] = ( fGeom->GetPPSDModuleSize(2) - fGeom->GetMicromegasWallThickness() ) / 2.0 ;
+ z = outparams[3] - cooler[1] ;
+ gMC->Gspos("PCOR", 1, "PTIO", 0., 0.0, z, idrotm[1], "ONLY") ;
+
+ // -------- Define the outer Aluminium cover -----
+ gMC->Gsvolu("PCOL", "TRD1", idtmed[701], emcg->GetAlCoverParams(), 4) ;
+ Float_t * covparams = emcg->GetAlCoverParams() ;
+ z = covparams[3] - outparams[3] ;
+ gMC->Gspos("PTIO", 1, "PCOL", 0., 0.0, z, 0, "ONLY") ;
+
+ // --------- Define front fiberglass cover -----------
+ gMC->Gsvolu("PFGC", "BOX ", idtmed[717], emcg->GetFiberGlassHalfSize(), 3) ;
+ z = - outparams[3] ;
+ gMC->Gspos("PFGC", 1, "PCOL", 0., 0.0, z, 0, "ONLY") ;
+
+ //=============This is all with cold section==============
+
+
+ //------ Warm Section --------------
+ gMC->Gsvolu("PWAR", "BOX ", idtmed[701], emcg->GetWarmAlCoverHalfSize(), 3) ;
+ Float_t * warmcov = emcg->GetWarmAlCoverHalfSize() ;
+
+ // --- Define the outer thermoinsulation ---
+ gMC->Gsvolu("PWTI", "BOX ", idtmed[706], emcg->GetWarmThermoHalfSize(), 3) ;
+ Float_t * warmthermo = emcg->GetWarmThermoHalfSize() ;
+ z = -warmcov[2] + warmthermo[2] ;
+
+ gMC->Gspos("PWTI", 1, "PWAR", 0., 0.0, z, 0, "ONLY") ;
+
+ // --- Define cables area and put in it T-supports ----
+ gMC->Gsvolu("PCA1", "BOX ", idtmed[718], emcg->GetTCables1HalfSize(), 3) ;
+ Float_t * cbox = emcg->GetTCables1HalfSize() ;
+
+ gMC->Gsvolu("PBE1", "BOX ", idtmed[701], emcg->GetTSupport1HalfSize(), 3) ;
+ Float_t * beams = emcg->GetTSupport1HalfSize() ;
+ Int_t isup ;
+ for(isup = 0; isup < emcg->GetNTSuppots(); isup++){
+ Float_t x = -cbox[0] + beams[0] + (2*beams[0]+emcg->GetTSupportDist())*isup ;
+ gMC->Gspos("PBE1", isup, "PCA1", x, 0.0, 0.0, 0, "ONLY") ;
+ }
- gMC->Gsvolu("PLPP", "BOX ", idtmed[709], lpppsd, 3) ;
-
- y0 = y0 - fGeom->GetPCThickness() / 2. - fGeom->GetCompositeThickness() / 2. ;
+ z = -warmthermo[2] + cbox[2];
+ gMC->Gspos("PCA1", 1, "PWTI", 0.0, 0.0, z, 0, "ONLY") ;
- gMC->Gspos("PLPP", 1, "PMPP", 0.0, y0, 0.0, 0, "ONLY") ;
+ gMC->Gsvolu("PCA2", "BOX ", idtmed[718], emcg->GetTCables2HalfSize(), 3) ;
+ Float_t * cbox2 = emcg->GetTCables2HalfSize() ;
- // Position the fNumberOfModulesPhi x fNumberOfModulesZ modules (mppsd) inside PPSD to cover a PHOS module
- // the top and bottom one's (which are assumed identical) :
+ gMC->Gsvolu("PBE2", "BOX ", idtmed[701], emcg->GetTSupport2HalfSize(), 3) ;
+ for(isup = 0; isup < emcg->GetNTSuppots(); isup++){
+ Float_t x = -cbox[0] + beams[0] + (2*beams[0]+emcg->GetTSupportDist())*isup ;
+ gMC->Gspos("PBE2", isup, "PCA2", x, 0.0, 0.0, 0, "ONLY") ;
+ }
- Float_t yt = ( fGeom->GetCPVBoxSize(1) - fGeom->GetMicromegas1Thickness() ) / 2. ;
- Float_t yb = - ( fGeom->GetCPVBoxSize(1) - fGeom->GetMicromegas2Thickness() ) / 2. ;
+ z = -warmthermo[2] + 2*cbox[2] + cbox2[2];
+ gMC->Gspos("PCA2", 1, "PWTI", 0.0, 0.0, z, 0, "ONLY") ;
- Int_t copyNumbertop = 0 ;
- Int_t copyNumberbot = fGeom->GetNumberOfModulesPhi() * fGeom->GetNumberOfModulesZ() ;
- Float_t x = ( fGeom->GetCPVBoxSize(0) - fGeom->GetPPSDModuleSize(0) ) / 2. ;
+ // --- Define frame ---
+ gMC->Gsvolu("PFRX", "BOX ", idtmed[716], emcg->GetFrameXHalfSize(), 3) ;
+ Float_t * posit = emcg->GetFrameXPosition() ;
+ gMC->Gspos("PFRX", 1, "PWTI", posit[0], posit[1], posit[2], 0, "ONLY") ;
+ gMC->Gspos("PFRX", 2, "PWTI", posit[0], -posit[1], posit[2], 0, "ONLY") ;
- for ( Int_t iphi = 1; iphi <= fGeom->GetNumberOfModulesPhi(); iphi++ ) { // the number of micromegas modules in phi per PHOS module
- Float_t z = ( fGeom->GetCPVBoxSize(2) - fGeom->GetPPSDModuleSize(2) ) / 2. ;
+ gMC->Gsvolu("PFRZ", "BOX ", idtmed[716], emcg->GetFrameZHalfSize(), 3) ;
+ posit = emcg->GetFrameZPosition() ;
+ gMC->Gspos("PFRZ", 1, "PWTI", posit[0], posit[1], posit[2], 0, "ONLY") ;
+ gMC->Gspos("PFRZ", 2, "PWTI", -posit[0], posit[1], posit[2], 0, "ONLY") ;
- for ( Int_t iz = 1; iz <= fGeom->GetNumberOfModulesZ(); iz++ ) { // the number of micromegas modules in z per PHOS module
- gMC->Gspos("PMPP", ++copyNumbertop, "PPSD", x, yt, z, 0, "ONLY") ;
- gMC->Gspos("PMPP", ++copyNumberbot, "PPSD", x, yb, z, 0, "ONLY") ;
- z = z - fGeom->GetPPSDModuleSize(2) ;
- } // end of Z module loop
- x = x - fGeom->GetPPSDModuleSize(0) ;
- } // end of phi module loop
+ // --- Define Fiber Glass support ---
+ gMC->Gsvolu("PFG1", "BOX ", idtmed[717], emcg->GetFGupXHalfSize(), 3) ;
+ posit = emcg->GetFGupXPosition() ;
+ gMC->Gspos("PFG1", 1, "PWTI", posit[0], posit[1], posit[2], 0, "ONLY") ;
+ gMC->Gspos("PFG1", 2, "PWTI", posit[0], -posit[1], posit[2], 0, "ONLY") ;
- // The Lead converter between two air gaps
- // 1. Upper air gap
+ gMC->Gsvolu("PFG2", "BOX ", idtmed[717], emcg->GetFGupZHalfSize(), 3) ;
+ posit = emcg->GetFGupZPosition();
+ gMC->Gspos("PFG2", 1, "PWTI", posit[0], posit[1], posit[2], 0, "ONLY") ;
+ gMC->Gspos("PFG2", 2, "PWTI", -posit[0], posit[1], posit[2], 0, "ONLY") ;
- Float_t uappsd[3] ;
- uappsd[0] = fGeom->GetCPVBoxSize(0) / 2.0 ;
- uappsd[1] = fGeom->GetMicro1ToLeadGap() / 2.0 ;
- uappsd[2] = fGeom->GetCPVBoxSize(2) / 2.0 ;
+ gMC->Gsvolu("PFG3", "BOX ", idtmed[717], emcg->GetFGlowXHalfSize(), 3) ;
+ posit = emcg->GetFGlowXPosition() ;
+ gMC->Gspos("PFG3", 1, "PWTI", posit[0], posit[1], posit[2], 0, "ONLY") ;
+ gMC->Gspos("PFG3", 2, "PWTI", posit[0], -posit[1], posit[2], 0, "ONLY") ;
- gMC->Gsvolu("PUAPPS", "BOX ", idtmed[798], uappsd, 3) ;
+ gMC->Gsvolu("PFG4", "BOX ", idtmed[717], emcg->GetFGlowZHalfSize(), 3) ;
+ posit = emcg->GetFGlowZPosition() ;
+ gMC->Gspos("PFG4", 1, "PWTI", posit[0], posit[1], posit[2], 0, "ONLY") ;
+ gMC->Gspos("PFG4", 2, "PWTI", -posit[0], posit[1], posit[2], 0, "ONLY") ;
- y0 = ( fGeom->GetCPVBoxSize(1) - 2 * fGeom->GetMicromegas1Thickness() - fGeom->GetMicro1ToLeadGap() ) / 2. ;
+ // --- Define Air Gap for FEE electronics -----
- gMC->Gspos("PUAPPS", 1, "PPSD", 0.0, y0, 0.0, 0, "ONLY") ;
+ gMC->Gsvolu("PAFE", "BOX ", idtmed[798], emcg->GetFEEAirHalfSize(), 3) ;
+ posit = emcg->GetFEEAirPosition() ;
+ gMC->Gspos("PAFE", 1, "PWTI", posit[0], posit[1], posit[2], 0, "ONLY") ;
- // 2. Lead converter
-
- Float_t lcppsd[3] ;
- lcppsd[0] = fGeom->GetCPVBoxSize(0) / 2.0 ;
- lcppsd[1] = fGeom->GetLeadConverterThickness() / 2.0 ;
- lcppsd[2] = fGeom->GetCPVBoxSize(2) / 2.0 ;
-
- gMC->Gsvolu("PLCPPS", "BOX ", idtmed[712], lcppsd, 3) ;
-
- y0 = y0 - fGeom->GetMicro1ToLeadGap() / 2. - fGeom->GetLeadConverterThickness() / 2. ;
+ // Define the EMC module volume and combine Cool and Warm sections
- gMC->Gspos("PLCPPS", 1, "PPSD", 0.0, y0, 0.0, 0, "ONLY") ;
+ gMC->Gsvolu("PEMC", "TRD1", idtmed[798], emcg->GetEMCParams(), 4) ;
- // 3. Lower air gap
+ z = - warmcov[2] ;
+ gMC->Gspos("PCOL", 1, "PEMC", 0., 0., z, 0, "ONLY") ;
+ z = covparams[3] ;
+ gMC->Gspos("PWAR", 1, "PEMC", 0., 0., z, 0, "ONLY") ;
- Float_t lappsd[3] ;
- lappsd[0] = fGeom->GetCPVBoxSize(0) / 2.0 ;
- lappsd[1] = fGeom->GetLeadToMicro2Gap() / 2.0 ;
- lappsd[2] = fGeom->GetCPVBoxSize(2) / 2.0 ;
- gMC->Gsvolu("PLAPPS", "BOX ", idtmed[798], lappsd, 3) ;
-
- y0 = y0 - fGeom->GetLeadConverterThickness() / 2. - fGeom->GetLeadToMicro2Gap() / 2. ;
-
- gMC->Gspos("PLAPPS", 1, "PPSD", 0.0, y0, 0.0, 0, "ONLY") ;
-
+ // Put created EMC geometry into PHOS volume
+
+ z = geom->GetCPVBoxSize(1) / 2. ;
+ gMC->Gspos("PEMC", 1, "PHOS", 0., 0., z, 0, "ONLY") ;
+
}
-
//____________________________________________________________________________
void AliPHOSv0::CreateGeometryforCPV()
{
@@ -1229,63 +694,69 @@ void AliPHOSv0::CreateGeometryforCPV()
// Get pointer to the array containing media indexes
Int_t *idtmed = fIdtmed->GetArray() - 699 ;
-
+
+ AliPHOSGeometry * geom = GetGeometry() ;
+
// The box containing all CPV for one PHOS module filled with air
- par[0] = fGeom->GetCPVBoxSize(0) / 2.0 ;
- par[1] = fGeom->GetCPVBoxSize(1) / 2.0 ;
- par[2] = fGeom->GetCPVBoxSize(2) / 2.0 ;
+ par[0] = geom->GetCPVBoxSize(0) / 2.0 ;
+ par[1] = geom->GetCPVBoxSize(1) / 2.0 ;
+ par[2] = geom->GetCPVBoxSize(2) / 2.0 ;
gMC->Gsvolu("PCPV", "BOX ", idtmed[798], par, 3) ;
-
- y = fGeom->GetOuterBoxSize(1) / 2.0 ;
- gMC->Gspos("PCPV", 1, "PHOS", 0.0, y, 0.0, 0, "ONLY") ;
+
+ Float_t * emcParams = geom->GetEMCAGeometry()->GetEMCParams() ;
+ z = - emcParams[3] ;
+ Int_t rotm ;
+ AliMatrix(rotm, 90.,0., 0., 0., 90., 90.) ;
+
+ gMC->Gspos("PCPV", 1, "PHOS", 0.0, 0.0, z, rotm, "ONLY") ;
// Gassiplex board
- par[0] = fGeom->GetGassiplexChipSize(0)/2.;
- par[1] = fGeom->GetGassiplexChipSize(1)/2.;
- par[2] = fGeom->GetGassiplexChipSize(2)/2.;
+ par[0] = geom->GetGassiplexChipSize(0)/2.;
+ par[1] = geom->GetGassiplexChipSize(1)/2.;
+ par[2] = geom->GetGassiplexChipSize(2)/2.;
gMC->Gsvolu("PCPC","BOX ",idtmed[707],par,3);
// Cu+Ni foil covers Gassiplex board
- par[1] = fGeom->GetCPVCuNiFoilThickness()/2;
+ par[1] = geom->GetCPVCuNiFoilThickness()/2;
gMC->Gsvolu("PCPD","BOX ",idtmed[710],par,3);
- y = -(fGeom->GetGassiplexChipSize(1)/2 - par[1]);
+ y = -(geom->GetGassiplexChipSize(1)/2 - par[1]);
gMC->Gspos("PCPD",1,"PCPC",0,y,0,0,"ONLY");
// Position of the chip inside CPV
- Float_t xStep = fGeom->GetCPVActiveSize(0) / (fGeom->GetNumberOfCPVChipsPhi() + 1);
- Float_t zStep = fGeom->GetCPVActiveSize(1) / (fGeom->GetNumberOfCPVChipsZ() + 1);
+ Float_t xStep = geom->GetCPVActiveSize(0) / (geom->GetNumberOfCPVChipsPhi() + 1);
+ Float_t zStep = geom->GetCPVActiveSize(1) / (geom->GetNumberOfCPVChipsZ() + 1);
Int_t copy = 0;
- y = fGeom->GetCPVFrameSize(1)/2 - fGeom->GetFTPosition(0) +
- fGeom->GetCPVTextoliteThickness() / 2 + fGeom->GetGassiplexChipSize(1) / 2 + 0.1;
- for (Int_t ix=0; ixGetNumberOfCPVChipsPhi(); ix++) {
- x = xStep * (ix+1) - fGeom->GetCPVActiveSize(0)/2;
- for (Int_t iz=0; izGetNumberOfCPVChipsZ(); iz++) {
+ y = geom->GetCPVFrameSize(1)/2 - geom->GetFTPosition(0) +
+ geom->GetCPVTextoliteThickness() / 2 + geom->GetGassiplexChipSize(1) / 2 + 0.1;
+ for (Int_t ix=0; ixGetNumberOfCPVChipsPhi(); ix++) {
+ x = xStep * (ix+1) - geom->GetCPVActiveSize(0)/2;
+ for (Int_t iz=0; izGetNumberOfCPVChipsZ(); iz++) {
copy++;
- z = zStep * (iz+1) - fGeom->GetCPVActiveSize(1)/2;
+ z = zStep * (iz+1) - geom->GetCPVActiveSize(1)/2;
gMC->Gspos("PCPC",copy,"PCPV",x,y,z,0,"ONLY");
}
}
// Foiled textolite (1 mm of textolite + 50 mkm of Cu + 6 mkm of Ni)
- par[0] = fGeom->GetCPVActiveSize(0) / 2;
- par[1] = fGeom->GetCPVTextoliteThickness() / 2;
- par[2] = fGeom->GetCPVActiveSize(1) / 2;
+ par[0] = geom->GetCPVActiveSize(0) / 2;
+ par[1] = geom->GetCPVTextoliteThickness() / 2;
+ par[2] = geom->GetCPVActiveSize(1) / 2;
gMC->Gsvolu("PCPF","BOX ",idtmed[707],par,3);
// Argon gas volume
- par[1] = (fGeom->GetFTPosition(2) - fGeom->GetFTPosition(1) - fGeom->GetCPVTextoliteThickness()) / 2;
+ par[1] = (geom->GetFTPosition(2) - geom->GetFTPosition(1) - geom->GetCPVTextoliteThickness()) / 2;
gMC->Gsvolu("PCPG","BOX ",idtmed[715],par,3);
for (Int_t i=0; i<4; i++) {
- y = fGeom->GetCPVFrameSize(1) / 2 - fGeom->GetFTPosition(i) + fGeom->GetCPVTextoliteThickness()/2;
+ y = geom->GetCPVFrameSize(1) / 2 - geom->GetFTPosition(i) + geom->GetCPVTextoliteThickness()/2;
gMC->Gspos("PCPF",i+1,"PCPV",0,y,0,0,"ONLY");
if(i==1){
- y-= (fGeom->GetFTPosition(2) - fGeom->GetFTPosition(1)) / 2;
+ y-= (geom->GetFTPosition(2) - geom->GetFTPosition(1)) / 2;
gMC->Gspos("PCPG",1,"PCPV ",0,y,0,0,"ONLY");
}
}
@@ -1298,27 +769,27 @@ void AliPHOSv0::CreateGeometryforCPV()
// Cu+Ni foil covers textolite
- par[1] = fGeom->GetCPVCuNiFoilThickness() / 2;
+ par[1] = geom->GetCPVCuNiFoilThickness() / 2;
gMC->Gsvolu("PCP1","BOX ",idtmed[710],par,3);
- y = fGeom->GetCPVTextoliteThickness()/2 - par[1];
+ y = geom->GetCPVTextoliteThickness()/2 - par[1];
gMC->Gspos ("PCP1",1,"PCPF",0,y,0,0,"ONLY");
// Aluminum frame around CPV
- par[0] = fGeom->GetCPVFrameSize(0)/2;
- par[1] = fGeom->GetCPVFrameSize(1)/2;
- par[2] = fGeom->GetCPVBoxSize(2) /2;
+ par[0] = geom->GetCPVFrameSize(0)/2;
+ par[1] = geom->GetCPVFrameSize(1)/2;
+ par[2] = geom->GetCPVBoxSize(2) /2;
gMC->Gsvolu("PCF1","BOX ",idtmed[701],par,3);
- par[0] = fGeom->GetCPVBoxSize(0)/2 - fGeom->GetCPVFrameSize(0);
- par[1] = fGeom->GetCPVFrameSize(1)/2;
- par[2] = fGeom->GetCPVFrameSize(2)/2;
+ par[0] = geom->GetCPVBoxSize(0)/2 - geom->GetCPVFrameSize(0);
+ par[1] = geom->GetCPVFrameSize(1)/2;
+ par[2] = geom->GetCPVFrameSize(2)/2;
gMC->Gsvolu("PCF2","BOX ",idtmed[701],par,3);
for (Int_t j=0; j<=1; j++) {
- x = TMath::Sign(1,2*j-1) * (fGeom->GetCPVBoxSize(0) - fGeom->GetCPVFrameSize(0)) / 2;
+ x = TMath::Sign(1,2*j-1) * (geom->GetCPVBoxSize(0) - geom->GetCPVFrameSize(0)) / 2;
gMC->Gspos("PCF1",j+1,"PCPV", x,0,0,0,"ONLY");
- z = TMath::Sign(1,2*j-1) * (fGeom->GetCPVBoxSize(2) - fGeom->GetCPVFrameSize(2)) / 2;
+ z = TMath::Sign(1,2*j-1) * (geom->GetCPVBoxSize(2) - geom->GetCPVFrameSize(2)) / 2;
gMC->Gspos("PCF2",j+1,"PCPV",0, 0,z,0,"ONLY");
}
@@ -1346,119 +817,353 @@ void AliPHOSv0::CreateGeometryforSupport()
// Get pointer to the array containing media indexes
Int_t *idtmed = fIdtmed->GetArray() - 699 ;
+ AliPHOSGeometry * geom = GetGeometry() ;
+
// --- Dummy box containing two rails on which PHOS support moves
// --- Put these rails to the bottom of the L3 magnet
- par[0] = fGeom->GetRailRoadSize(0) / 2.0 ;
- par[1] = fGeom->GetRailRoadSize(1) / 2.0 ;
- par[2] = fGeom->GetRailRoadSize(2) / 2.0 ;
+ par[0] = geom->GetRailRoadSize(0) / 2.0 ;
+ par[1] = geom->GetRailRoadSize(1) / 2.0 ;
+ par[2] = geom->GetRailRoadSize(2) / 2.0 ;
gMC->Gsvolu("PRRD", "BOX ", idtmed[798], par, 3) ;
- y0 = -(fGeom->GetRailsDistanceFromIP() - fGeom->GetRailRoadSize(1) / 2.0) ;
+ y0 = -(geom->GetRailsDistanceFromIP() - geom->GetRailRoadSize(1) / 2.0) ;
gMC->Gspos("PRRD", 1, "ALIC", 0.0, y0, 0.0, 0, "ONLY") ;
// --- Dummy box containing one rail
- par[0] = fGeom->GetRailOuterSize(0) / 2.0 ;
- par[1] = fGeom->GetRailOuterSize(1) / 2.0 ;
- par[2] = fGeom->GetRailOuterSize(2) / 2.0 ;
+ par[0] = geom->GetRailOuterSize(0) / 2.0 ;
+ par[1] = geom->GetRailOuterSize(1) / 2.0 ;
+ par[2] = geom->GetRailOuterSize(2) / 2.0 ;
gMC->Gsvolu("PRAI", "BOX ", idtmed[798], par, 3) ;
for (i=0; i<2; i++) {
- x0 = (2*i-1) * fGeom->GetDistanceBetwRails() / 2.0 ;
+ x0 = (2*i-1) * geom->GetDistanceBetwRails() / 2.0 ;
gMC->Gspos("PRAI", i, "PRRD", x0, 0.0, 0.0, 0, "ONLY") ;
}
// --- Upper and bottom steel parts of the rail
- par[0] = fGeom->GetRailPart1(0) / 2.0 ;
- par[1] = fGeom->GetRailPart1(1) / 2.0 ;
- par[2] = fGeom->GetRailPart1(2) / 2.0 ;
+ par[0] = geom->GetRailPart1(0) / 2.0 ;
+ par[1] = geom->GetRailPart1(1) / 2.0 ;
+ par[2] = geom->GetRailPart1(2) / 2.0 ;
gMC->Gsvolu("PRP1", "BOX ", idtmed[716], par, 3) ;
- y0 = - (fGeom->GetRailOuterSize(1) - fGeom->GetRailPart1(1)) / 2.0 ;
+ y0 = - (geom->GetRailOuterSize(1) - geom->GetRailPart1(1)) / 2.0 ;
gMC->Gspos("PRP1", 1, "PRAI", 0.0, y0, 0.0, 0, "ONLY") ;
- y0 = (fGeom->GetRailOuterSize(1) - fGeom->GetRailPart1(1)) / 2.0 - fGeom->GetRailPart3(1);
+ y0 = (geom->GetRailOuterSize(1) - geom->GetRailPart1(1)) / 2.0 - geom->GetRailPart3(1);
gMC->Gspos("PRP1", 2, "PRAI", 0.0, y0, 0.0, 0, "ONLY") ;
// --- The middle vertical steel parts of the rail
- par[0] = fGeom->GetRailPart2(0) / 2.0 ;
- par[1] = fGeom->GetRailPart2(1) / 2.0 ;
- par[2] = fGeom->GetRailPart2(2) / 2.0 ;
+ par[0] = geom->GetRailPart2(0) / 2.0 ;
+ par[1] = geom->GetRailPart2(1) / 2.0 ;
+ par[2] = geom->GetRailPart2(2) / 2.0 ;
gMC->Gsvolu("PRP2", "BOX ", idtmed[716], par, 3) ;
- y0 = - fGeom->GetRailPart3(1) / 2.0 ;
+ y0 = - geom->GetRailPart3(1) / 2.0 ;
gMC->Gspos("PRP2", 1, "PRAI", 0.0, y0, 0.0, 0, "ONLY") ;
// --- The most upper steel parts of the rail
- par[0] = fGeom->GetRailPart3(0) / 2.0 ;
- par[1] = fGeom->GetRailPart3(1) / 2.0 ;
- par[2] = fGeom->GetRailPart3(2) / 2.0 ;
+ par[0] = geom->GetRailPart3(0) / 2.0 ;
+ par[1] = geom->GetRailPart3(1) / 2.0 ;
+ par[2] = geom->GetRailPart3(2) / 2.0 ;
gMC->Gsvolu("PRP3", "BOX ", idtmed[716], par, 3) ;
- y0 = (fGeom->GetRailOuterSize(1) - fGeom->GetRailPart3(1)) / 2.0 ;
+ y0 = (geom->GetRailOuterSize(1) - geom->GetRailPart3(1)) / 2.0 ;
gMC->Gspos("PRP3", 1, "PRAI", 0.0, y0, 0.0, 0, "ONLY") ;
// --- The wall of the cradle
// --- The wall is empty: steel thin walls and air inside
- par[1] = TMath::Sqrt(
- TMath::Power((fGeom->GetIPtoOuterCoverDistance() + fGeom->GetOuterBoxSize(1)),2) +
- TMath::Power((fGeom->GetOuterBoxSize(0)/2),2)) + 10.;
- par[0] = par[1] - fGeom->GetCradleWall(1) ;
- par[2] = fGeom->GetCradleWall(2) / 2.0 ;
- par[3] = fGeom->GetCradleWall(3) ;
- par[4] = fGeom->GetCradleWall(4) ;
+ par[1] = TMath::Sqrt(TMath::Power((geom->GetIPtoCPVDistance() + geom->GetOuterBoxSize(3)),2) +
+ TMath::Power((geom->GetOuterBoxSize(1)/2),2))+10. ;
+ par[0] = par[1] - geom->GetCradleWall(1) ;
+ par[2] = geom->GetCradleWall(2) / 2.0 ;
+ par[3] = geom->GetCradleWall(3) ;
+ par[4] = geom->GetCradleWall(4) ;
gMC->Gsvolu("PCRA", "TUBS", idtmed[716], par, 5) ;
- par[0] -= fGeom->GetCradleWallThickness() ;
- par[1] -= fGeom->GetCradleWallThickness() ;
- par[2] -= fGeom->GetCradleWallThickness() ;
+ par[0] += geom->GetCradleWallThickness() ;
+ par[1] -= geom->GetCradleWallThickness() ;
+ par[2] -= geom->GetCradleWallThickness() ;
gMC->Gsvolu("PCRE", "TUBS", idtmed[798], par, 5) ;
gMC->Gspos ("PCRE", 1, "PCRA", 0.0, 0.0, 0.0, 0, "ONLY") ;
for (i=0; i<2; i++) {
- z0 = (2*i-1) * (fGeom->GetOuterBoxSize(2) + fGeom->GetCradleWall(2)) / 2.0 ;
- gMC->Gspos("PCRA", i, "ALIC", 0.0, 0.0, z0, 0, "ONLY") ;
+ z0 = (2*i-1) * (geom->GetOuterBoxSize(2) + geom->GetCradleWall(2) )/ 2.0 ;
+ gMC->Gspos("PCRA", i, "ALIC", 0.0, 0.0, z0, 0, "ONLY") ;
}
// --- The "wheels" of the cradle
- par[0] = fGeom->GetCradleWheel(0) / 2;
- par[1] = fGeom->GetCradleWheel(1) / 2;
- par[2] = fGeom->GetCradleWheel(2) / 2;
+ par[0] = geom->GetCradleWheel(0) / 2;
+ par[1] = geom->GetCradleWheel(1) / 2;
+ par[2] = geom->GetCradleWheel(2) / 2;
gMC->Gsvolu("PWHE", "BOX ", idtmed[716], par, 3) ;
- y0 = -(fGeom->GetRailsDistanceFromIP() - fGeom->GetRailRoadSize(1) -
- fGeom->GetCradleWheel(1)/2) ;
+ y0 = -(geom->GetRailsDistanceFromIP() - geom->GetRailRoadSize(1) -
+ geom->GetCradleWheel(1)/2) ;
for (i=0; i<2; i++) {
- z0 = (2*i-1) * ((fGeom->GetOuterBoxSize(2) + fGeom->GetCradleWheel(2)) / 2.0 +
- fGeom->GetCradleWall(2));
+ z0 = (2*i-1) * ((geom->GetOuterBoxSize(2) + geom->GetCradleWheel(2))/ 2.0 +
+ geom->GetCradleWall(2));
for (j=0; j<2; j++) {
copy = 2*i + j;
- x0 = (2*j-1) * fGeom->GetDistanceBetwRails() / 2.0 ;
+ x0 = (2*j-1) * geom->GetDistanceBetwRails() / 2.0 ;
gMC->Gspos("PWHE", copy, "ALIC", x0, y0, z0, 0, "ONLY") ;
}
}
}
+//_____________________________________________________________________________
+void AliPHOSv0::AddAlignableVolumes() const
+{
+ //
+ // Create entries for alignable volumes associating the symbolic volume
+ // name with the corresponding volume path. Needs to be syncronized with
+ // eventual changes in the geometry
+ // Alignable volumes are:
+ // 1) PHOS modules as a whole
+ // 2) Cradle
+ // 3) Cradle wheels
+ // 4) Strip units (group of 2x8 crystals)
+
+ TString volpath, symname;
+
+ // Alignable modules
+ // Volume path /ALIC_1/PHOS_ => symbolic name /PHOS/Module, =1,2,3,4,5
+
+ AliGeomManager::ELayerID idPHOS1 = AliGeomManager::kPHOS1;
+ AliGeomManager::ELayerID idPHOS2 = AliGeomManager::kPHOS2;
+ Int_t modUID, modnum = 0;
+ TString physModulePath="/ALIC_1/PHOS_";
+ TString symbModuleName="PHOS/Module";
+ Int_t nModules = GetGeometry()->GetNModules();
+
+ char im[5] ;
+ for(Int_t iModule=1; iModule<=nModules; iModule++){
+ sprintf(im,"%d",iModule) ;
+ if(strstr(GetTitle(),im)==0 && strcmp(GetTitle(),"IHEP")!=0 && strcmp(GetTitle(),"noCPV")!=0)
+ continue ;
+ modUID = AliGeomManager::LayerToVolUID(idPHOS1,modnum++);
+ volpath = physModulePath;
+ volpath += iModule;
+ // volpath += "/PEMC_1/PCOL_1/PTIO_1/PCOR_1/PAGA_1/PTII_1";
+
+ // Check the volume path if not all 5 modules exist
+ if (!gGeoManager->CheckPath(volpath.Data())) {
+ AliError(Form("Volume path %s not valid!",volpath.Data()));
+ continue;
+ }
+
+ symname = symbModuleName;
+ symname += iModule;
+ if(!gGeoManager->SetAlignableEntry(symname.Data(),volpath.Data(),modUID))
+ continue ;
+// AliFatal(Form("Alignable entry %s not created. Volume path %s not valid", symname.Data(),volpath.Data()));
+
+ // Creates the Tracking to Local transformation matrix for PHOS modules
+ TGeoPNEntry *alignableEntry = gGeoManager->GetAlignableEntryByUID(modUID) ;
+
+ Float_t angle = GetGeometry()->GetPHOSAngle(iModule);
+ TGeoHMatrix* globMatrix = alignableEntry->GetGlobalOrig();
+
+ TGeoHMatrix *matTtoL = new TGeoHMatrix;
+ matTtoL->RotateZ(-90.+angle);
+ matTtoL->MultiplyLeft(&(globMatrix->Inverse()));
+ alignableEntry->SetMatrix(matTtoL);
+ }
+
+ //Aligning of CPV should be done for volume PCPV_1
+ symbModuleName="PHOS/Module";
+ modnum=0;
+ for(Int_t iModule=1; iModule<=nModules; iModule++){
+ if(strstr(GetTitle(),"noCPV"))
+ continue ;
+ sprintf(im,"%d",iModule) ;
+ if(strstr(GetTitle(),im)==0 && strcmp(GetTitle(),"IHEP")!=0)
+ continue ;
+ modUID = AliGeomManager::LayerToVolUID(idPHOS2,modnum++);
+ volpath = physModulePath;
+ volpath += iModule;
+ volpath += "/PCPV_1";
+ // Check the volume path
+ if (!gGeoManager->CheckPath(volpath.Data())) {
+ AliError(Form("Volume path %s not valid!",volpath.Data()));
+ continue;
+ }
+
+ symname = symbModuleName;
+ symname += iModule;
+ symname += "/CPV";
+ if(!gGeoManager->SetAlignableEntry(symname.Data(),volpath.Data(),modUID))
+ AliFatal(Form("Alignable entry %s not created. Volume path %s not valid", symname.Data(),volpath.Data()));
+
+ // Creates the TGeo Local to Tracking transformation matrix ...
+ TGeoPNEntry *alignableEntry = gGeoManager->GetAlignableEntryByUID(modUID) ;
+
+ Float_t angle = GetGeometry()->GetPHOSAngle(iModule);
+ TGeoHMatrix* globMatrix = alignableEntry->GetGlobalOrig();
+
+ TGeoHMatrix *matTtoL = new TGeoHMatrix;
+ matTtoL->RotateZ(-90.+angle);
+ matTtoL->MultiplyLeft(&(globMatrix->Inverse()));
+ alignableEntry->SetMatrix(matTtoL);
+
+ }
+
+
+ // Alignable cradle walls
+ // Volume path /ALIC_1/PCRA_ => symbolic name /PHOS/Cradle, =0,1
+
+ TString physCradlePath="/ALIC_1/PCRA_";
+ TString symbCradleName="PHOS/Cradle";
+ Int_t nCradles = 2;
+
+ for(Int_t iCradle=0; iCradleSetAlignableEntry(symname.Data(),volpath.Data());
+ }
+
+ // Alignable wheels
+ // Volume path /ALIC_1/PWHE_ => symbolic name /PHOS/Wheel, i=0,1,2,3
+
+ TString physWheelPath="/ALIC_1/PWHE_";
+ TString symbWheelName="PHOS/Wheel";
+ Int_t nWheels = 4;
+
+ for(Int_t iWheel=0; iWheelSetAlignableEntry(symname.Data(),volpath.Data());
+ }
+
+ //Physical strip path is a combination of: physModulePath + module number +
+ //physStripPath + strip number == ALIC_1/PHOS_N/..../PSTR_M
+ const Int_t nStripsX = GetGeometry()->GetEMCAGeometry()->GetNStripX();
+ const Int_t nStripsZ = GetGeometry()->GetEMCAGeometry()->GetNStripZ();
+ TString partialPhysStripName(100);
+ TString fullPhysStripName(100);
+ TString partialSymbStripName(100);
+ TString fullSymbStripName(100);
+
+ for(Int_t module = 1; module <= nModules; ++module){
+
+ sprintf(im,"%d",module) ;
+ if(strstr(GetTitle(),im)==0 && strcmp(GetTitle(),"IHEP")!=0 && strcmp(GetTitle(),"noCPV")!=0)
+ continue ;
+
+ volpath = physModulePath;
+ volpath += module;
+ // Check the volume path if not all 5 modules exist
+ if (!gGeoManager->CheckPath(volpath.Data())) {
+ AliError(Form("Volume path %s does not exist",volpath.Data())) ;
+ continue;
+ }
+
+ partialPhysStripName = physModulePath;
+ partialPhysStripName += module;
+ partialPhysStripName += "/PEMC_1/PCOL_1/PTIO_1/PCOR_1/PAGA_1/PTII_1/PSTR_";
+
+ partialSymbStripName = symbModuleName;
+ partialSymbStripName += module;
+ partialSymbStripName += "/Strip_";
+
+ for(Int_t i = 0, ind1D = 1; i < nStripsX; ++i){//ind1D starts from 1 (PSTR_1...PSTR_224...)
+ for(Int_t j = 0; j < nStripsZ; ++j, ++ind1D){
+ fullPhysStripName = partialPhysStripName;
+ fullPhysStripName += ind1D;
+
+ fullSymbStripName = partialSymbStripName;
+ fullSymbStripName += i;//ind1D;
+ fullSymbStripName += '_';
+ fullSymbStripName += j;
+
+ gGeoManager->SetAlignableEntry(fullSymbStripName.Data(), fullPhysStripName.Data());
+
+ // Creates the TGeo Local to Tracking transformation matrix ...
+ TGeoPNEntry *alignableEntry = gGeoManager->GetAlignableEntry(fullSymbStripName.Data()) ;
+ const char *path = alignableEntry->GetTitle();
+ if (!gGeoManager->cd(path))
+ AliFatal(Form("Volume path %s not valid!",path));
+ TGeoHMatrix matLtoT = *gGeoManager->GetCurrentMatrix() ;
+ Double_t refl[3]={-1.,-1.,-1.} ;
+ matLtoT.SetScale(refl) ;
+ TGeoHMatrix *matTtoL = new TGeoHMatrix(matLtoT.Inverse());
+
+ char phosPath[50] ;
+ sprintf(phosPath,"/ALIC_1/PHOS_%d",module) ;
+ if (!gGeoManager->cd(phosPath)){
+ AliFatal("Geo manager can not find path \n");
+ }
+ TGeoHMatrix *mPHOS = gGeoManager->GetCurrentMatrix();
+ if (mPHOS)
+ matTtoL->Multiply(mPHOS);
+ else{
+ AliFatal("Geo matrixes are not loaded \n") ;
+ }
+ //Switch y<->z
+ Double_t rot[9]={1.,0.,0., 0.,1.,0., 0.,0.,1.} ;
+ matTtoL->SetRotation(rot) ;
+ alignableEntry->SetMatrix(matTtoL);
+
+/*
+ //Check poisition of corner cell of the strip
+ AliPHOSGeometry * geom = AliPHOSGeometry::GetInstance() ;
+ Int_t relid[4] ;
+ relid[0] = module ;
+ relid[1] = 0 ;
+ Int_t iStrip=ind1D ;
+ Int_t icell=1 ;
+ Int_t raw = geom->GetEMCAGeometry()->GetNCellsXInStrip()*((iStrip-1)/geom->GetEMCAGeometry()->GetNStripZ()) +
+ 1 + (icell-1)/geom->GetEMCAGeometry()->GetNCellsZInStrip() ;
+ Int_t col = geom->GetEMCAGeometry()->GetNCellsZInStrip()*(1+(iStrip-1)%geom->GetEMCAGeometry()->GetNStripZ()) -
+ (icell-1)%geom->GetEMCAGeometry()->GetNCellsZInStrip() ;
+ if(col==0) col=geom->GetNZ() ;
+ relid[2] = raw ;
+ relid[3] = col ;
+ Float_t xG,zG ;
+ geom->RelPosInModule(relid, xG, zG) ;
+printf("============\n") ;
+printf("Geometry: x=%f, z=%f \n",xG,zG) ;
+ Int_t absid ;
+ geom->RelToAbsNumbering(relid,absid) ;
+ Double_t pos[3]= {-2.2*3.5,0.0,1.1}; //Position incide the strip (Y coordinalte is not important)
+ Double_t posC[3]={0.0,0.0,0.}; //Global position
+
+ matTtoL->MasterToLocal(pos,posC);
+printf("Matrix: x=%f, z=%f, y=%f \n",posC[0],posC[2],posC[1]) ;
+*/
+ }
+ }
+ }
+}
+
//____________________________________________________________________________
Float_t AliPHOSv0::ZMin(void) const
{
// Overall dimension of the PHOS (min)
- // Take it twice more than the PHOS module size
- return -fGeom->GetOuterBoxSize(2);
+
+ AliPHOSGeometry * geom = GetGeometry() ;
+
+ return -geom->GetOuterBoxSize(2)/2.;
}
//____________________________________________________________________________
Float_t AliPHOSv0::ZMax(void) const
{
// Overall dimension of the PHOS (max)
- // Take it twice more than the PHOS module size
- return fGeom->GetOuterBoxSize(2);
+
+ AliPHOSGeometry * geom = GetGeometry() ;
+
+ return geom->GetOuterBoxSize(2)/2.;
}
//____________________________________________________________________________
@@ -1468,21 +1173,20 @@ void AliPHOSv0::Init(void)
Int_t i;
- printf("\n");
- for(i=0;i<35;i++) printf("*");
- printf(" PHOS_INIT ");
- for(i=0;i<35;i++) printf("*");
- printf("\n");
+ if(AliLog::GetGlobalDebugLevel()>0) {
+ TString st ;
+ for(i=0;i<35;i++)
+ st += "*";
+ Info("Init", "%s", st.Data()) ;
+ // Here the PHOS initialisation code (if any!)
+
+ AliPHOSGeometry * geom = GetGeometry() ;
- // Here the PHOS initialisation code (if any!)
+ if (geom!=0)
+ Info("Init", "AliPHOS%s: PHOS geometry intialized for %s", Version().Data(), geom->GetName()) ;
+ else
+ Info("Init", "AliPHOS%s: PHOS geometry initialization failed !", Version().Data()) ;
- if (fGeom!=0)
- cout << "AliPHOS" << Version() << " : PHOS geometry intialized for " << fGeom->GetName() << endl ;
- else
- cout << "AliPHOS" << Version() << " : PHOS geometry initialization failed !" << endl ;
-
- for(i=0;i<80;i++) printf("*");
- printf("\n");
-
+ Info("Init", "%s", st.Data()) ;
+ }
}
-