X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ITS%2FAliITSvPPRasymmFMD.cxx;h=2126bb4d683c4ae61abd0e5b699a67b9f75cb230;hb=13033bec779e3c7449f3b07baa200b933a9b463e;hp=d894f8493a6fcd77c4fa3572d9f31d4e5993532f;hpb=18f301315a3a26426155e4e75e481468139fd1db;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/AliITSvPPRasymmFMD.cxx b/ITS/AliITSvPPRasymmFMD.cxx index d894f8493a6..2126bb4d683 100644 --- a/ITS/AliITSvPPRasymmFMD.cxx +++ b/ITS/AliITSvPPRasymmFMD.cxx @@ -29,32 +29,20 @@ // See AliITSvPPRasymmFMD::StepManager(). -#include -#include -#include - -#include -#include #include -#include // only required for Tracking function? #include #include -#include +#include +#include +#include +#include #include -#include -#include -#include -#include #include -#include -#include +#include +#include -#include "AliConst.h" #include "AliITS.h" -#include "AliITSClusterFinderSDD.h" -#include "AliITSClusterFinderSPD.h" -#include "AliITSClusterFinderSSD.h" -#include "AliITSDetType.h" +#include "AliITSDetTypeSim.h" #include "AliITSGeant3Geometry.h" #include "AliITSgeom.h" #include "AliITSgeomSDD.h" @@ -62,19 +50,22 @@ #include "AliITSgeomSSD.h" #include "AliITShit.h" #include "AliITSresponseSDD.h" -#include "AliITSresponseSPD.h" -#include "AliITSresponseSSD.h" +#include "AliITSCalibrationSDD.h" +#include "AliITSCalibrationSPD.h" +#include "AliITSCalibrationSSD.h" #include "AliITSsegmentationSDD.h" #include "AliITSsegmentationSPD.h" #include "AliITSsegmentationSSD.h" -#include "AliITSsimulationSDD.h" -#include "AliITSsimulationSPD.h" -#include "AliITSsimulationSSD.h" #include "AliITSvPPRasymmFMD.h" +#include "AliLog.h" +#include "AliMC.h" #include "AliMagF.h" #include "AliRun.h" #include "AliTrackReference.h" + +#define GEANTGEOMETRY kTRUE + ClassImp(AliITSvPPRasymmFMD) //______________________________________________________________________ @@ -93,12 +84,13 @@ AliITSvPPRasymmFMD::AliITSvPPRasymmFMD() { fIdSens = 0; fEuclidOut = kFALSE; // Don't write Euclide file fGeomDetOut = kFALSE; // Don't write .det file - fGeomDetIn = kFALSE; // Don't Read .det file + fGeomDetIn = kFALSE; // Read .det file fMajorVersion = IsVersion(); fMinorVersion = -1; for(i=0;i<60;i++) fRead[i] = '\0'; for(i=0;i<60;i++) fWrite[i] = '\0'; for(i=0;i<60;i++) fEuclidGeomDet[i] = '\0'; + strncpy(fRead,"$ALICE_ROOT/ITS/ITSgeometry_vPPRasymmFMD.det",60); } //______________________________________________________________________ AliITSvPPRasymmFMD::AliITSvPPRasymmFMD(const char *name, const char *title) @@ -115,6 +107,7 @@ AliITSvPPRasymmFMD::AliITSvPPRasymmFMD(const char *name, const char *title) fIdN = 6; fIdName = new TString[fIdN]; + fIdName[0] = name; // removes warning message fIdName[0] = "ITS1"; fIdName[1] = "ITS2"; fIdName[2] = "ITS3"; @@ -127,7 +120,7 @@ AliITSvPPRasymmFMD::AliITSvPPRasymmFMD(const char *name, const char *title) fMinorVersion = 2; fEuclidOut = kFALSE; // Don't write Euclide file fGeomDetOut = kFALSE; // Don't write .det file - fGeomDetIn = kFALSE; // Don't Read .det file + fGeomDetIn = kFALSE; // Read .det file SetThicknessDet1(); SetThicknessDet2(); SetThicknessChip1(); @@ -138,9 +131,11 @@ AliITSvPPRasymmFMD::AliITSvPPRasymmFMD(const char *name, const char *title) strncpy(fEuclidGeomDet,"$ALICE_ROOT/ITS/ITSgeometry_vPPRasymm2.det",60); strncpy(fRead,fEuclidGeomDet,60); strncpy(fWrite,fEuclidGeomDet,60); + strncpy(fRead,"$ALICE_ROOT/ITS/ITSgeometry_vPPRasymmFMD.det",60); } //______________________________________________________________________ -AliITSvPPRasymmFMD::AliITSvPPRasymmFMD(const AliITSvPPRasymmFMD &source){ +AliITSvPPRasymmFMD::AliITSvPPRasymmFMD(const AliITSvPPRasymmFMD &source) : + AliITS(source){ // Copy Constructor for ITS version 10. This function is not to be // used. If any other instance of this function, other than "this" is // passed, an error message is returned. @@ -319,70 +314,58 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ dchip2 = GetThicknessChip2(); if(ddet1 < 100. || ddet1 > 300.) { - cout << "ITS - WARNING: the detector thickness for layer 1 is outside " - "the range of [100,300] microns. The default value of 200 microns " - "will be used." << endl; + AliWarning("The detector thickness for layer 1 is outside "); + AliWarning("the range of [100,300] microns. The default value of 200 microns "); + AliWarning("will be used."); ddet1=200.; } // end if if(ddet2 < 100. || ddet2 > 300.) { - cout << "ITS - WARNING: the detector thickness for layer 2 is outside " - "the range of [100,300] microns. The default value of 200 microns " - "will be used." << endl; + AliWarning("The detector thickness for layer 2 is outside "); + AliWarning("the range of [100,300] microns. The default value of 200 microns "); + AliWarning("will be used."); ddet2=200.; }// end if if(dchip1 < 100. || dchip1 > 300.) { - cout << "ITS - WARNING: the chip thickness for layer 1 is outside " - "the range of [100,300] microns. The default value of 200 microns " - "will be used." << endl; - dchip1=200.; + AliWarning("The chip thickness for layer 1 is outside"); + AliWarning("the range of [100,300] microns. The default value of 200 microns"); + AliWarning("will be used."); + dchip1=200.; }// end if if(dchip2 < 100. || dchip2 > 300.) { - cout << "ITS - WARNING: the chip thickness for layer 2 is outside " - "the range of [100,300] microns. The default value of 200 microns" - " will be used." << endl; - dchip2=200.; + AliWarning("The chip thickness for layer 2 is outside"); + AliWarning("the range of [100,300] microns. The default value of 200 microns"); + AliWarning("will be used"); + dchip2=200.; }// end if Int_t rails = 1; // flag for rails (1 --> rails in; 0 --> rails out) - - Int_t fluid = 1; // flag for the cooling fluid (1 --> water; 0 --> freon) + Int_t fluid = 1; // flag for the cooling fluid (1 --> water; 0 --> freon) + // This option is maintained for SDD and SSD only + // For SPD the cooling liquid is C4F10 rails = GetRails(); fluid = GetCoolingFluid(); if(rails != 0 && rails != 1) { - cout << "ITS - WARNING: the switch for rails is not set neither " - "to 0 (rails out) nor to 1 (rails in). The default value of " - "1 (rails in) will be used." << endl; + AliWarning("The switch for rails is not set neither"); + AliWarning("to 0 (rails out) nor to 1 (rails in). The default value of"); + AliWarning("1 (rails in) will be used"); + rails=1; }// end if - if(fluid != 0 && fluid != 1) { - cout << "ITS - WARNING: the switch for cooling fluid is not set " - "neither to 0 (freon) nor to 1 (water). The default value of " - "1 (water) will be used." << endl; - }// end if - cout << "ITS: Detector thickness on layer 1 is set to " << - ddet1 << " microns." << endl; - cout << "ITS: Chip thickness on layer 1 is set to " << - dchip1 << " microns." << endl; - cout << "ITS: Detector thickness on layer 2 is set to " << - ddet2 << " microns." << endl; - cout << "ITS: Chip thickness on layer 2 is set to " << - dchip2 << " microns." << endl; + AliInfo(Form("Detector thickness on layer 1 is set to %f microns",ddet1)); + AliInfo(Form("Chip thickness on layer 1 is set to %f microns",dchip1)); + AliInfo(Form("Detector thickness on layer 2 is set to %f microns",ddet2)); + AliInfo(Form("Chip thickness on layer 2 is set to %f microns",dchip2)); if(rails == 0 ) { - cout << "ITS: Rails are out." << endl; - } else { - cout << "ITS: Rails are in." << endl; - }// end if - if(fluid == 0 ) { - cout << "ITS: The cooling fluid is freon." << endl; + AliInfo("Rails are out."); } else { - cout << "ITS: The cooling fluid is water." << endl; + AliInfo("Rails are in."); }// end if ddet1 = ddet1*0.0001/2.; // conversion from tot length in um to half in cm @@ -403,46 +386,46 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ Float_t sin30, cos30; // SDD electronics+services main volumes - Float_t I018dits[3], I024dits[3], I047dits[3], I048dits[3]; + Float_t iI018dits[3], iI024dits[3], iI047dits[3], iI048dits[3]; // SDD detector ladder - Float_t I302dits[3], I402dits[3], I004dits[3], I005dits[3]; - Float_t Y_SDD_sep = 0.20; + Float_t iI302dits[3], iI402dits[3], iI004dits[3], iI005dits[3]; + Float_t ySDDsep = 0.20; Float_t ySDD; Int_t iSDD; - Float_t Z_SDD_lay3[6] = { 18.55, 10.95, 3.70, -3.70,-11.20,-18.35}; - Float_t Z_SDD_lay4[8] = { 25.75, 18.60, 11.00, 3.70, -3.70,-11.20, + Float_t zSDDlay3[6] = { 18.55, 10.95, 3.70, -3.70,-11.20,-18.35}; + Float_t zSDDlay4[8] = { 25.75, 18.60, 11.00, 3.70, -3.70,-11.20, -18.45,-26.05}; // ladder foot and end-ladder (frame and cooling) - Float_t I028dits[3], I420dits[3], I421dits[3], I422dits[6], I423dits[3]; - Float_t I424dits[3], xI424, yI424; - Float_t I425dits[3]; + Float_t iI028dits[3], iI420dits[3], iI421dits[3], iI422dits[6], iI423dits[3]; + Float_t iI424dits[3], xI424, yI424; + Float_t iI425dits[3]; Int_t indI425; - Float_t I029dits[4], I030dits[4], I031dits[3], I032dits[3]; + Float_t iI029dits[4], iI030dits[4], iI031dits[3], iI032dits[3]; // SDD ladder frame and cooling - Float_t SDD_CoolPipe[3] = {1.7000, -0.5500, 0.0000}; - Float_t I035dits[3], I037dits[3], I038dits[3]; - Float_t I039dits[3], xI039, yI039; - Float_t I041dits[5]; + Float_t iSDDCoolPipe[3] = {1.7000, -0.5500, 0.0000}; + Float_t iI035dits[3], iI037dits[3], iI038dits[3]; + Float_t iI039dits[3], xI039, yI039; + Float_t iI041dits[5]; // SDD hybrid, chips and capacitors - Float_t I050dits[3], xI050, yI050; - Float_t I052dits[3], xI052, yI052; - Float_t I042dits[3], xI042, yI042; + Float_t iI050dits[3], xI050, yI050; + Float_t iI052dits[3], xI052, yI052; + Float_t iI042dits[3], xI042, yI042; Float_t xI042space = 0.17; - Float_t I043dits[3], xI043, yI043; + Float_t iI043dits[3], xI043, yI043; Float_t xI043space = 0.17; Float_t zchip, zChipSpace; - Float_t I051dits[3], xI051, yI051, zI051, yI051space, xcap; + Float_t iI051dits[3], xI051, yI051, zI051, yI051space, xcap; Int_t ichip, icap; // SDD microcables - Float_t I044dits[4], xI044, yI044, volI044; + Float_t iI044dits[4], xI044, yI044, volI044; Float_t xHV, yHV, zHV, xLV, yLV, zLV; - Char_t HVname[5], LVname[5]; + Char_t nameHV[5], nameLV[5]; // Define media off-set @@ -558,6 +541,7 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ AliMatrix(idrotm[218],90.0,337.003998,90.0,67.003998,0.0,0.0); AliMatrix(idrotm[219],90.0,247.000305,90.0,337.000305,0.0,0.0); AliMatrix(idrotm[220],90.0,305.633514,90.0,35.633499,0.0,0.0); + AliMatrix(idrotm[221],90.0,58.000198,90.0,148.000198,0.0,0.0); AliMatrix(idrotm[222],90.0,327.997101,90.0,57.997101,0.0,0.0); AliMatrix(idrotm[223],90.0,237.994202,90.0,327.994202,0.0,0.0); @@ -888,6 +872,9 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ // Services AliMatrix(idrotm[200], 90., 0., 90., 90., 180., 0.); + // New reference frame: z---> -z; x ---> -x; y ---> y + AliMatrix(idrotm[199], 90.,180., 90.,90., 180.,0.); + // CONVERT INTO CM (RL(SI)=9.36 CM) for (i = 0; i < 6; ++i) { drl[i] = drl[i] / 100. * 9.36; @@ -910,37 +897,37 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ dgh[8] = 85.; dgh[9] = -ztpc; dgh[10] = 46; - dgh[11] = rlim+6; + dgh[11] = rlim+7.5; dgh[12] = -97.5; dgh[13] = 46; - dgh[14] = rlim+6; + dgh[14] = rlim+7.5; dgh[15] = -zmax; dgh[16] = 46; - dgh[17] = rlim+6; + dgh[17] = rlim+7.5; dgh[18] = -48; dgh[19] = 6; - dgh[20] = rlim+6; + dgh[20] = rlim+7.5; dgh[21] = -28.6; dgh[22] = 6; - dgh[23] = rlim+6; + dgh[23] = rlim+7.5; dgh[24] = -27.6; dgh[25] = 3.295; - dgh[26] = rlim+6; + dgh[26] = rlim+7.5; dgh[27] = 27.6; dgh[28] = 3.295; - dgh[29] = rlim+6; + dgh[29] = rlim+7.5; dgh[30] = 28.6; dgh[31] = 6; - dgh[32] = rlim+6; + dgh[32] = rlim+7.5; dgh[33] = 48; dgh[34] = 6; - dgh[35] = rlim+6; + dgh[35] = rlim+7.5; dgh[36] = zmax; dgh[37] = 46; - dgh[38] = rlim+6; + dgh[38] = rlim+7.5; dgh[39] = 97.5; dgh[40] = 46; - dgh[41] = rlim+6; + dgh[41] = rlim+7.5; dgh[42] = ztpc; dgh[43] = 62; dgh[44] = 62+4.; @@ -954,7 +941,8 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ // --- Place the ghost volume in its mother volume (ALIC) and make it // invisible - gMC->Gspos("ITSV", 1, "ALIC", 0., 0., 0., 0, "ONLY"); + // gMC->Gspos("ITSV", 1, "ALIC", 0., 0., 0., 0, "ONLY"); + gMC->Gspos("ITSV", 1, "ALIC", 0., 0., 0., idrotm[199], "MANY"); //gMC->Gsatt("ITSV", "SEEN", 0); // --- Define ghost volume containing the six layers and fill it with air @@ -1094,6 +1082,7 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ dits[4] = 75.261; gMC->Gsvolu("I137", "TUBS", idtmed[253], dits, 5); + dits[0] = 1.3401; dits[1] = 0.01; dits[2] = 24; @@ -1170,7 +1159,7 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ gMC->Gsvolu("I103", "BOX ", idtmed[254], di103, 3); // contains det // and chip layer 1 dits[0] = 0.793; - dits[1] = 0.475; //0.685; 0.015 + dits[1] = ddet1+dchip1+dbus+0.0025; dits[2] = 2.5; gMC->Gsvolu("I105", "BOX ", idtmed[290], dits, 3);// end-ladder electr. @@ -1217,25 +1206,14 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ dits[4] = 180; gMC->Gsvolu("I114", "TUBS", idtmed[264], dits, 5); - if (fluid == 1) { - dits[0] = 0; - dits[1] = 0.025; - dits[2] = 24; - dits[3] = 0; - dits[4] = 180; - gMC->Gsvolu("I115", "TUBS", idtmed[211], dits, 5); // set water - // as cooling - // fluid - } else { - dits[0] = 0; - dits[1] = 0.025; - dits[2] = 24; - dits[3] = 0; - dits[4] = 180; - gMC->Gsvolu("I115", "TUBS", idtmed[212], dits, 5); // set freon - // as cooling - // fluid - } // end if fluid + dits[0] = 0; + dits[1] = 0.025; + dits[2] = 24; + dits[3] = 0; + dits[4] = 180; + gMC->Gsvolu("I115", "TUBS", idtmed[211], dits, 5); // set freon + // as cooling + // fluid dits[0] = 0.063; dits[1] = 0.035; dits[2] = 24; @@ -1261,20 +1239,12 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ di1d1[2] = 3.536; gMC->Gsvolu("I1D1", "BOX ", idtmed[250], di1d1, 3);// contains detector // layer 2 - if (fluid == 1) { - dits[0] = 0.063; - dits[1] = 0.025; - dits[2] = 24; - gMC->Gsvolu("I117", "BOX ", idtmed[211], dits, 3); // set water as - // cooling fuid - } else { - dits[0] = 0.063; - dits[1] = 0.025; - dits[2] = 24; - gMC->Gsvolu("I117", "BOX ", idtmed[212], dits, 3); // set freon + dits[0] = 0.063; + dits[1] = 0.025; + dits[2] = 24; + gMC->Gsvolu("I117", "BOX ", idtmed[211], dits, 3); // set freon // as cooling // fluid - }// end if fluid dits1[0] = 0.64; dits1[1] = ddet1; @@ -1352,87 +1322,52 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ dits[2] = 0.55; gMC->Gsvolu("I678", "TUBE", idtmed[263], dits, 3); // was I178 in old geom - if (fluid == 1) { - dits[0] = 0; - dits[1] = 0.3; - dits[2] = 1.5; - gMC->Gsvolu("I677", "TUBE", idtmed[211], dits, 3); // set water as cooling fluid - // was I177 in old geom. - } else { - dits[0] = 0; - dits[1] = 0.3; - dits[2] = 1.5; - gMC->Gsvolu("I677", "TUBE", idtmed[212], dits, 3); // set freon as cooling fluid - // was I177 in old geom. - } + + dits[0] = 0; + dits[1] = 0.3; + dits[2] = 1.5; + gMC->Gsvolu("I677", "TUBE", idtmed[211], dits, 3); // set freon as cooling fluid + // was I177 in old geom. + dits[0] = 0.07; dits[1] = 0.125; dits[2] = 0.3; gMC->Gsvolu("I675", "TUBE", idtmed[263], dits, 3); // was I175 in old geom - if (fluid == 1) { - dits[0] = 0; - dits[1] = 0.1; - dits[2] = 0.8; - gMC->Gsvolu("I674", "TUBE", idtmed[211], dits, 3); // set water as cooling fluid - // was I174 in old geom. - } else { - dits[0] = 0; - dits[1] = 0.1; - dits[2] = 0.8; - gMC->Gsvolu("I674", "TUBE", idtmed[212], dits, 3); // set freon as cooling fluid - // was I174 in old geom. - } + + dits[0] = 0; + dits[1] = 0.1; + dits[2] = 0.8; + gMC->Gsvolu("I674", "TUBE", idtmed[211], dits, 3); // set freon as cooling fluid + // was I174 in old geom. + - if (fluid == 1) { - dits[0] = 0; - dits[1] = 0.1; - dits[2] = 3; - gMC->Gsvolu("I672", "TUBE", idtmed[211], dits, 3); // set water as cooling fluid - // was I172 in old geom. - } else { - dits[0] = 0; - dits[1] = 0.1; - dits[2] = 3; - gMC->Gsvolu("I672", "TUBE", idtmed[212], dits, 3); // set freon as cooling fluid - // was I172 in old geom. - } + dits[0] = 0; + dits[1] = 0.1; + dits[2] = 3; + gMC->Gsvolu("I672", "TUBE", idtmed[211], dits, 3); // set freon as cooling fluid + // was I172 in old geom. - if (fluid == 1) { - dits[0] = 0; - dits[1] = 0.0746; - dits[2] = 0.8; - gMC->Gsvolu("I670", "TUBE", idtmed[211], dits, 3); // set water as cooling fluid - // was I170 in old geom. - } else { - dits[0] = 0; - dits[1] = 0.0746; - dits[2] = 0.8; - gMC->Gsvolu("I670", "TUBE", idtmed[212], dits, 3); // set freon as cooling fluid - // was I170 in old geom. - } + + dits[0] = 0; + dits[1] = 0.0746; + dits[2] = 0.8; + gMC->Gsvolu("I670", "TUBE", idtmed[211], dits, 3); // set freon as cooling fluid + // was I170 in old geom. + + + dits[0] = 3.7; + dits[1] = 5.4; + dits[2] = 0.35; + dits[3] = 2; + dits[4] = 36; + gMC->Gsvolu("I668", "TUBS", idtmed[211], dits, 5); // set freon as cooling fluid + // was I168 in old geom. - if (fluid == 1) { - dits[0] = 3.7; - dits[1] = 5.4; - dits[2] = 0.35; - dits[3] = 2; - dits[4] = 36; - gMC->Gsvolu("I668", "TUBS", idtmed[211], dits, 5); // set water as cooling fluid - // was I168 in old geom. - } else { - dits[0] = 3.7; - dits[1] = 5.4; - dits[2] = 0.35; - dits[3] = 2; - dits[4] = 36; - gMC->Gsvolu("I668", "TUBS", idtmed[212], dits, 5); // set freon as cooling fluid - // was I168 in old geom. - } - } + } // --- Define SPD (option 'b') volumes ---------------------------- @@ -1611,7 +1546,7 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ gMC->Gsvolu("I124", "TUBS", idtmed[253], dits, 5); dits[0] = 0.793; - dits[1] = 0.475 ; //0.685; 0.015 + dits[1] = ddet1+dchip1+dbus+0.0025; dits[2] = 2.5; gMC->Gsvolu("I105", "BOX ", idtmed[290], dits, 3); @@ -1666,21 +1601,13 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ dits[4] = 180; gMC->Gsvolu("I114", "TUBS", idtmed[264], dits, 5); - if (fluid == 1) { - dits[0] = 0; - dits[1] = 0.025; - dits[2] = 24; - dits[3] = 0; - dits[4] = 180; - gMC->Gsvolu("I115", "TUBS", idtmed[211], dits, 5); // set water as cooling fluid - } else { - dits[0] = 0; - dits[1] = 0.025; - dits[2] = 24; - dits[3] = 0; - dits[4] = 180; - gMC->Gsvolu("I115", "TUBS", idtmed[212], dits, 5); // set freon as cooling fluid - } + dits[0] = 0; + dits[1] = 0.025; + dits[2] = 24; + dits[3] = 0; + dits[4] = 180; + gMC->Gsvolu("I115", "TUBS", idtmed[211], dits, 5); // set freon as cooling fluid + dits[0] = 0.063; dits[1] = 0.035; @@ -1708,17 +1635,12 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ gMC->Gsvolu("I1D1", "BOX ", idtmed[250], di1d1, 3); // contains detector // layer 2 - if (fluid == 1) { - dits[0] = 0.063; - dits[1] = 0.025; - dits[2] = 24; - gMC->Gsvolu("I117", "BOX ", idtmed[211], dits, 3); // set water as cooling fluid - } else { - dits[0] = 0.063; - dits[1] = 0.025; - dits[2] = 24; - gMC->Gsvolu("I117", "BOX ", idtmed[212], dits, 3); // set freon as cooling fluid - } + + dits[0] = 0.063; + dits[1] = 0.025; + dits[2] = 24; + gMC->Gsvolu("I117", "BOX ", idtmed[211], dits, 3); // set freon as cooling fluid + dits1[0] = 0.64; dits1[1] = ddet1; @@ -1781,84 +1703,47 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ dits[2] = 0.55; gMC->Gsvolu("I678", "TUBE", idtmed[263], dits, 3); // was I178 in old geom. - if (fluid == 1) { - dits[0] = 0; - dits[1] = 0.3; - dits[2] = 1.5; - gMC->Gsvolu("I677", "TUBE", idtmed[211], dits, 3); //set water as cooling fluid - // was I177 in old geom. - } else { - dits[0] = 0; - dits[1] = 0.3; - dits[2] = 1.5; - gMC->Gsvolu("I677", "TUBE", idtmed[212], dits, 3); //set freon as cooling fluid - // was I177 in old geom. - } - + dits[0] = 0; + dits[1] = 0.3; + dits[2] = 1.5; + gMC->Gsvolu("I677", "TUBE", idtmed[211], dits, 3); //set freon as cooling fluid + // was I177 in old geom. + dits[0] = 0.07; dits[1] = 0.125; dits[2] = 0.3; gMC->Gsvolu("I675", "TUBE", idtmed[263], dits, 3); // was I175 in old geom. - if (fluid == 1) { - dits[0] = 0; - dits[1] = 0.1; - dits[2] = 0.8; - gMC->Gsvolu("I674", "TUBE", idtmed[211], dits, 3); //set water as cooling fluid - // was I174 in old geom. - } else { - dits[0] = 0; - dits[1] = 0.1; - dits[2] = 0.8; - gMC->Gsvolu("I674", "TUBE", idtmed[212], dits, 3); //set freon as cooling fluid - // was I174 in old geom. - } + + dits[0] = 0; + dits[1] = 0.1; + dits[2] = 0.8; + gMC->Gsvolu("I674", "TUBE", idtmed[211], dits, 3); //set freon as cooling fluid + // was I174 in old geom. - if (fluid == 1) { - dits[0] = 0; - dits[1] = 0.1; - dits[2] = 3; - gMC->Gsvolu("I672", "TUBE", idtmed[211], dits, 3); //set water as cooling fluid - // was I172 in old geom. - } else { - dits[0] = 0; - dits[1] = 0.1; - dits[2] = 3; - gMC->Gsvolu("I672", "TUBE", idtmed[212], dits, 3); //set freon as cooling fluid - // was I172 in old geom. - } - if (fluid == 1) { - dits[0] = 0; - dits[1] = 0.0746; - dits[2] = 0.8; - gMC->Gsvolu("I670", "TUBE", idtmed[211], dits, 3); //set water as cooling fluid - // was I170 in old geom. - } else { - dits[0] = 0; - dits[1] = 0.0746; - dits[2] = 0.8; - gMC->Gsvolu("I670", "TUBE", idtmed[212], dits, 3); //set freon as cooling fluid - // was I170 in old geom. - } + + dits[0] = 0; + dits[1] = 0.1; + dits[2] = 3; + gMC->Gsvolu("I672", "TUBE", idtmed[211], dits, 3); //set freon as cooling fluid + // was I172 in old geom. + + + dits[0] = 0; + dits[1] = 0.0746; + dits[2] = 0.8; + gMC->Gsvolu("I670", "TUBE", idtmed[211], dits, 3); //set freon as cooling fluid + // was I170 in old geom. + + dits[0] = 3.7; + dits[1] = 5.4; + dits[2] = 0.35; + dits[3] = 2; + dits[4] = 36; + gMC->Gsvolu("I668", "TUBS", idtmed[211], dits, 5); //set freon as cooling fluid + // was I168 in old geom. - if (fluid == 1) { - dits[0] = 3.7; - dits[1] = 5.4; - dits[2] = 0.35; - dits[3] = 2; - dits[4] = 36; - gMC->Gsvolu("I668", "TUBS", idtmed[211], dits, 5); //set water as cooling fluid - // was I168 in old geom. - } else { - dits[0] = 3.7; - dits[1] = 5.4; - dits[2] = 0.35; - dits[3] = 2; - dits[4] = 36; - gMC->Gsvolu("I668", "TUBS", idtmed[212], dits, 5); //set freon as cooling fluid - // was I168 in old geom. - } } @@ -1869,183 +1754,183 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ cos30 = cos(30.*3.14159/180.); sin30 = sin(30.*3.14159/180.); - + Double_t maxRadius = 28.5; dits[0] = 0; dits[1] = 360; dits[2] = 6; dits[3] = -34.6; dits[4] = 23.49; - dits[5] = 28; - dits[6] = -23.65; + dits[5] = maxRadius; + dits[6] = -27.35; dits[7] = 23.49; - dits[8] = 28; - dits[9] = -23.65; + dits[8] = maxRadius; + dits[9] = -27.35; dits[10] = 14.59; - dits[11] = 28; - dits[12] = 23.65; + dits[11] = maxRadius; + dits[12] = 27.35; dits[13] = 14.59; - dits[14] = 28; - dits[15] = 23.65; + dits[14] = maxRadius; + dits[15] = 27.35; dits[16] = 23.49; - dits[17] = 28; + dits[17] = maxRadius; dits[18] = 34.6; dits[19] = 23.49; - dits[20] = 28; + dits[20] = maxRadius; gMC->Gsvolu("IT34", "PCON", idtmed[209], dits, 21); // block of the SDD electronics and related ladder frame - I018dits[0] = 3.2; - I018dits[1] = 2; - I018dits[2] = 3.65; - gMC->Gsvolu("I018", "BOX ", idtmed[209], I018dits, 3); + iI018dits[0] = 3.2; + iI018dits[1] = 2; + iI018dits[2] = 3.65; + gMC->Gsvolu("I018", "BOX ", idtmed[209], iI018dits, 3); // block of the SDD end ladder - I024dits[0] = 3.2; - I024dits[1] = 2; - I024dits[2] = 2.725; - gMC->Gsvolu("I024", "BOX ", idtmed[209], I024dits, 3); + iI024dits[0] = 3.2; + iI024dits[1] = 2; + iI024dits[2] = 2.725; + gMC->Gsvolu("I024", "BOX ", idtmed[209], iI024dits, 3); // ladder frame of layer 3 - F.T. March,7-2001 - I047dits[0] = I018dits[0]; - I047dits[1] = I018dits[1]; - I047dits[2] = 6*I018dits[2] + 2*I024dits[2]; - gMC->Gsvolu("I047", "BOX ", idtmed[209], I047dits, 3); + iI047dits[0] = iI018dits[0]; + iI047dits[1] = iI018dits[1]; + iI047dits[2] = 6*iI018dits[2] + 2*iI024dits[2]; + gMC->Gsvolu("I047", "BOX ", idtmed[209], iI047dits, 3); // ladder frame of layer 4 - F.T. March,7-2001 - I048dits[0] = I018dits[0]; - I048dits[1] = I018dits[1]; - I048dits[2] = 8*I018dits[2] + 2*I024dits[2]; - gMC->Gsvolu("I048", "BOX ", idtmed[209], I048dits, 3); + iI048dits[0] = iI018dits[0]; + iI048dits[1] = iI018dits[1]; + iI048dits[2] = 8*iI018dits[2] + 2*iI024dits[2]; + gMC->Gsvolu("I048", "BOX ", idtmed[209], iI048dits, 3); // global SDD volume (sensitive + insensitive) - I302dits[0] = 3.6250; - I302dits[1] = 0.0150; - I302dits[2] = 4.3794; - gMC->Gsvolu("I302", "BOX ", idtmed[278], I302dits, 3); + iI302dits[0] = 3.6250; + iI302dits[1] = 0.0150; + iI302dits[2] = 4.3794; + gMC->Gsvolu("I302", "BOX ", idtmed[278], iI302dits, 3); // Like for I302 - F.T. March,7-2001 - I402dits[0] = 3.6250; - I402dits[1] = 0.0150; - I402dits[2] = 4.3794; - gMC->Gsvolu("I402", "BOX ", idtmed[278], I402dits, 3); + iI402dits[0] = 3.6250; + iI402dits[1] = 0.0150; + iI402dits[2] = 4.3794; + gMC->Gsvolu("I402", "BOX ", idtmed[278], iI402dits, 3); // SDD ladder of layer 3 - F.T. March,7-2001 - I004dits[0] = I302dits[0]+0.005; - I004dits[1] = 2*I302dits[1]+Y_SDD_sep/2.; - I004dits[2] = TMath::Abs(Z_SDD_lay3[0]); - if (I004dits[2] < TMath::Abs(Z_SDD_lay3[5])) { - I004dits[2] = TMath::Abs(Z_SDD_lay3[5]); + iI004dits[0] = iI302dits[0]+0.005; + iI004dits[1] = 2*iI302dits[1]+ySDDsep/2.; + iI004dits[2] = TMath::Abs(zSDDlay3[0]); + if (iI004dits[2] < TMath::Abs(zSDDlay3[5])) { + iI004dits[2] = TMath::Abs(zSDDlay3[5]); } - I004dits[2] = I004dits[2] + I302dits[2]; - gMC->Gsvolu("I004", "BOX ", idtmed[209], I004dits, 3); + iI004dits[2] = iI004dits[2] + iI302dits[2]; + gMC->Gsvolu("I004", "BOX ", idtmed[209], iI004dits, 3); // SDD ladder of layer 4 - F.T. March,7-2001 - I005dits[0] = I402dits[0]+0.005; - I005dits[1] = 2*I402dits[1]+Y_SDD_sep/2.; - I005dits[2] = TMath::Abs(Z_SDD_lay4[0]); - if (I005dits[2] < TMath::Abs(Z_SDD_lay4[7])) { - I005dits[2] = TMath::Abs(Z_SDD_lay4[7]); + iI005dits[0] = iI402dits[0]+0.005; + iI005dits[1] = 2*iI402dits[1]+ySDDsep/2.; + iI005dits[2] = TMath::Abs(zSDDlay4[0]); + if (iI005dits[2] < TMath::Abs(zSDDlay4[7])) { + iI005dits[2] = TMath::Abs(zSDDlay4[7]); } - I005dits[2] = I005dits[2] + I402dits[2]; - gMC->Gsvolu("I005", "BOX ", idtmed[209], I005dits, 3); + iI005dits[2] = iI005dits[2] + iI402dits[2]; + gMC->Gsvolu("I005", "BOX ", idtmed[209], iI005dits, 3); // -- block of the SDD ladder foot and end ladder // ladder foot mother volume - I028dits[0] = 3.0000; - I028dits[1] = 0.4000; - I028dits[2] = 0.9000; - gMC->Gsvolu("I028", "BOX ", idtmed[224], I028dits, 3); + iI028dits[0] = 3.0000; + iI028dits[1] = 0.4000; + iI028dits[2] = 0.9000; + gMC->Gsvolu("I028", "BOX ", idtmed[224], iI028dits, 3); // positioning-box #1 at SDD end-ladder - F.T. March,7-2001 - I420dits[0] = 0.4500; - I420dits[1] = 0.4000; - I420dits[2] = 0.4500; - gMC->Gsvolu("I420", "BOX ", idtmed[264], I420dits, 3); + iI420dits[0] = 0.4500; + iI420dits[1] = 0.4000; + iI420dits[2] = 0.4500; + gMC->Gsvolu("I420", "BOX ", idtmed[264], iI420dits, 3); // positioning-box #2 at SDD end-ladder - F.T. March,7-2001 - I421dits[0] = 0.; - I421dits[1] = 0.25; - I421dits[2] = I420dits[1]; - gMC->Gsvolu("I421", "TUBE", idtmed[209], I421dits, 3); + iI421dits[0] = 0.; + iI421dits[1] = 0.25; + iI421dits[2] = iI420dits[1]; + gMC->Gsvolu("I421", "TUBE", idtmed[209], iI421dits, 3); // reference ruby-sphere at SDD end-ladder - F.T. March,7-2001 - I422dits[0] = 0.0000; - I422dits[1] = 0.2000; - I422dits[2] = 0.0000; - I422dits[3] = 180.00; - I422dits[4] = 0.0000; - I422dits[5] = 360.00; - gMC->Gsvolu("I422", "SPHE", idtmed[277], I422dits, 6); + iI422dits[0] = 0.0000; + iI422dits[1] = 0.2000; + iI422dits[2] = 0.0000; + iI422dits[3] = 180.00; + iI422dits[4] = 0.0000; + iI422dits[5] = 360.00; + gMC->Gsvolu("I422", "SPHE", idtmed[277], iI422dits, 6); // support for ruby-sphere (I422) - F.T. March,7-2001 - I423dits[0] = 0.0000; - I423dits[1] = 0.1000; - I423dits[2] = (I420dits[1]-I422dits[1])/2.; - gMC->Gsvolu("I423", "TUBE", idtmed[264], I423dits, 3); + iI423dits[0] = 0.0000; + iI423dits[1] = 0.1000; + iI423dits[2] = (iI420dits[1]-iI422dits[1])/2.; + gMC->Gsvolu("I423", "TUBE", idtmed[264], iI423dits, 3); // passage for HV microcables - F.T. March,7-2001 - I424dits[0] = 1.5000; - I424dits[1] = 0.1500; - I424dits[2] = I421dits[2]; - gMC->Gsvolu("I424", "BOX ", idtmed[209], I424dits, 3); + iI424dits[0] = 1.5000; + iI424dits[1] = 0.1500; + iI424dits[2] = iI421dits[2]; + gMC->Gsvolu("I424", "BOX ", idtmed[209], iI424dits, 3); // HV microcables segment at the end ladder - F.T. March,7-2001 - I425dits[0] = 1.350000; - I425dits[1] = 0.015250; - I425dits[2] = I024dits[2]; - gMC->Gsvolu("I425", "BOX ", idtmed[279], I425dits, 3); + iI425dits[0] = 1.350000; + iI425dits[1] = 0.015250; + iI425dits[2] = iI024dits[2]; + gMC->Gsvolu("I425", "BOX ", idtmed[279], iI425dits, 3); // lower edge of SDD ladder frame at end-ladder - part 1 dits[0] = 0.2; dits[1] = 0.1815; - dits[2] = I024dits[2]; + dits[2] = iI024dits[2]; dits[3] = 0.015; gMC->Gsvolu("I025", "TRD1", idtmed[208], dits, 4); // lower edge of SDD ladder frame at end-ladder - part 2 dits[0] = 0.183; dits[1] = 0.165; - dits[2] = I024dits[2]; + dits[2] = iI024dits[2]; dits[3] = 0.015; gMC->Gsvolu("I026", "TRD1", idtmed[208], dits, 4); // new: for the 1st top rod of the structure // at the end-ladder - F.T. March,7-2001 - I029dits[0] = 0.2; - I029dits[1] = 0.1815; - I029dits[2] = 1.0100; - I029dits[3] = 0.015; - gMC->Gsvolu("I029", "TRD1", idtmed[208], I029dits, 4); + iI029dits[0] = 0.2; + iI029dits[1] = 0.1815; + iI029dits[2] = 1.0100; + iI029dits[3] = 0.015; + gMC->Gsvolu("I029", "TRD1", idtmed[208], iI029dits, 4); // new: for the 2nd top rod of the structure // at the end-ladder - F.T. March,7-2001 - I030dits[0] = 0.1830; - I030dits[1] = 0.1650; - I030dits[2] = 1.0100; - I030dits[3] = 0.0150; - gMC->Gsvolu("I030", "TRD1", idtmed[208], I030dits, 4); + iI030dits[0] = 0.1830; + iI030dits[1] = 0.1650; + iI030dits[2] = 1.0100; + iI030dits[3] = 0.0150; + gMC->Gsvolu("I030", "TRD1", idtmed[208], iI030dits, 4); // inox cooling tubes for the end ladder - F.T. March,7-2001 - I031dits[0] = 0.093; - I031dits[1] = 0.1; - I031dits[2] = I024dits[2]; - gMC->Gsvolu("I031", "TUBE", idtmed[264], I031dits, 3); + iI031dits[0] = 0.093; + iI031dits[1] = 0.1; + iI031dits[2] = iI024dits[2]; + gMC->Gsvolu("I031", "TUBE", idtmed[264], iI031dits, 3); if (fluid == 1) { // cooling water for the end ladder - F.T. March,7-2001 - I032dits[0] = 0; - I032dits[1] = I031dits[0]; - I032dits[2] = I024dits[2]; - gMC->Gsvolu("I032", "TUBE", idtmed[211], I032dits, 3); + iI032dits[0] = 0; + iI032dits[1] = iI031dits[0]; + iI032dits[2] = iI024dits[2]; + gMC->Gsvolu("I032", "TUBE", idtmed[211], iI032dits, 3); } else { // cooling freon for the end ladder - R.B. March,21-2001 - I032dits[0] = 0; - I032dits[1] = I031dits[0]; - I032dits[2] = I024dits[2]; - gMC->Gsvolu("I032", "TUBE", idtmed[212], I032dits, 3); + iI032dits[0] = 0; + iI032dits[1] = iI031dits[0]; + iI032dits[2] = iI024dits[2]; + gMC->Gsvolu("I032", "TUBE", idtmed[212], iI032dits, 3); } // -- block of the SDD ladder frame holding the electronics @@ -2098,10 +1983,10 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ gMC->Gsvolu("I034", "TUBE", idtmed[277], dits, 3); // holders of cooling tubes - I035dits[0] = 0.1; - I035dits[1] = 0.15; - I035dits[2] = 0.2; - gMC->Gsvolu("I035", "TUBE", idtmed[208], I035dits, 3); + iI035dits[0] = 0.1; + iI035dits[1] = 0.15; + iI035dits[2] = 0.2; + gMC->Gsvolu("I035", "TUBE", idtmed[208], iI035dits, 3); // top holders of microcables dits[0] = 0.2; @@ -2110,84 +1995,84 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ gMC->Gsvolu("I036", "BOX ", idtmed[208], dits, 3); // inox cooling tubes - F.T. March,7-2001 - I037dits[0] = 0.093; - I037dits[1] = 0.1; - I037dits[2] = I018dits[2]; - gMC->Gsvolu("I037", "TUBE", idtmed[264], I037dits, 3); + iI037dits[0] = 0.093; + iI037dits[1] = 0.1; + iI037dits[2] = iI018dits[2]; + gMC->Gsvolu("I037", "TUBE", idtmed[264], iI037dits, 3); if (fluid == 1) { // cooling water - F.T. March,7-2001 - I038dits[0] = 0; - I038dits[1] = I037dits[0]; - I038dits[2] = I018dits[2]; - gMC->Gsvolu("I038", "TUBE", idtmed[211], I038dits, 3); + iI038dits[0] = 0; + iI038dits[1] = iI037dits[0]; + iI038dits[2] = iI018dits[2]; + gMC->Gsvolu("I038", "TUBE", idtmed[211], iI038dits, 3); } else { // cooling freon - R.B. March,21-2001 - I038dits[0] = 0; - I038dits[1] = I037dits[0]; - I038dits[2] = I018dits[2]; - gMC->Gsvolu("I038", "TUBE", idtmed[212], I038dits, 3); + iI038dits[0] = 0; + iI038dits[1] = iI037dits[0]; + iI038dits[2] = iI018dits[2]; + gMC->Gsvolu("I038", "TUBE", idtmed[212], iI038dits, 3); } // -- block of the SDD electronics (heat bridge, chips, hybrid, anode microcable) // SDD heat bridge - F.T. March,7-2001 - I039dits[0] = 1.1000; - I039dits[1] = 0.0087; - I039dits[2] = 3.2500; - gMC->Gsvolu("I039", "BOX ", idtmed[268], I039dits, 3); + iI039dits[0] = 1.1000; + iI039dits[1] = 0.0087; + iI039dits[2] = 3.2500; + gMC->Gsvolu("I039", "BOX ", idtmed[268], iI039dits, 3); // SDD clip part 1 dits[0] = 0.25; dits[1] = 0.01; - dits[2] = I039dits[2]; + dits[2] = iI039dits[2]; gMC->Gsvolu("I040", "BOX ", idtmed[268], dits, 3); // SDD clip part 2 - I041dits[0] = 0.1; - I041dits[1] = 0.12; - I041dits[2] = I039dits[2]; - I041dits[3] = 90; - I041dits[4] = 320; - gMC->Gsvolu("I041", "TUBS", idtmed[268], I041dits, 5); + iI041dits[0] = 0.1; + iI041dits[1] = 0.12; + iI041dits[2] = iI039dits[2]; + iI041dits[3] = 90; + iI041dits[4] = 320; + gMC->Gsvolu("I041", "TUBS", idtmed[268], iI041dits, 5); // SDD PASCAL - F.T. March,7-2001 - I042dits[0] = 0.5000; - I042dits[1] = 0.0175; - I042dits[2] = 0.5000; - gMC->Gsvolu("I042", "BOX ", idtmed[206], I042dits, 3); + iI042dits[0] = 0.5000; + iI042dits[1] = 0.0175; + iI042dits[2] = 0.5000; + gMC->Gsvolu("I042", "BOX ", idtmed[206], iI042dits, 3); // SDD AMBRA - F.T. March,7-2001 - I043dits[0] = 0.3500; - I043dits[1] = 0.0175; - I043dits[2] = 0.5000; - gMC->Gsvolu("I043", "BOX ", idtmed[206], I043dits, 3); + iI043dits[0] = 0.3500; + iI043dits[1] = 0.0175; + iI043dits[2] = 0.5000; + gMC->Gsvolu("I043", "BOX ", idtmed[206], iI043dits, 3); // SDD capacitors - F.T. March,7-2001 - I051dits[0] = 0.1400; - I051dits[1] = 0.0350; - I051dits[2] = 0.0625; - gMC->Gsvolu("I051", "BOX ", idtmed[276], I051dits, 3); + iI051dits[0] = 0.1400; + iI051dits[1] = 0.0350; + iI051dits[2] = 0.0625; + gMC->Gsvolu("I051", "BOX ", idtmed[276], iI051dits, 3); // SDD hybrid circuit - F.T. March,7-2001 - I052dits[0] = 1.725000; - I052dits[1] = 0.003743; - I052dits[2] = I039dits[2]; - gMC->Gsvolu("I052", "BOX ", idtmed[281], I052dits, 3); + iI052dits[0] = 1.725000; + iI052dits[1] = 0.003743; + iI052dits[2] = iI039dits[2]; + gMC->Gsvolu("I052", "BOX ", idtmed[281], iI052dits, 3); // SDD anode microcable : changed - F.T. March,7-2001 - I044dits[0] = I018dits[2]; - I044dits[1] = I039dits[2]; - I044dits[2] = 0.00084; - I044dits[3] = (15.189149/(I044dits[0]+I044dits[1]))/2; - gMC->Gsvolu("I044", "TRD1", idtmed[282], I044dits, 4); - volI044 = ((2*I044dits[0] + 2*I044dits[1]) * 2*I044dits[2])/2 * 2*I044dits[3]; + iI044dits[0] = iI018dits[2]; + iI044dits[1] = iI039dits[2]; + iI044dits[2] = 0.00084; + iI044dits[3] = (15.189149/(iI044dits[0]+iI044dits[1]))/2; + gMC->Gsvolu("I044", "TRD1", idtmed[282], iI044dits, 4); + volI044 = ((2*iI044dits[0] + 2*iI044dits[1]) * 2*iI044dits[2])/2 * 2*iI044dits[3]; // SDD electronics box - F.T. March,7-2001 - I050dits[1] = I039dits[1]+I052dits[1]+I051dits[1]+I044dits[2]; - I050dits[0] = I018dits[1]/cos(30.*3.14159/180.)-I050dits[1]*sin(30.*3.14159/180.); - I050dits[2] = I018dits[2]; - gMC->Gsvolu("I050", "BOX ", idtmed[209], I050dits, 3); + iI050dits[1] = iI039dits[1]+iI052dits[1]+iI051dits[1]+iI044dits[2]; + iI050dits[0] = iI018dits[1]/cos(30.*3.14159/180.)-iI050dits[1]*sin(30.*3.14159/180.); + iI050dits[2] = iI018dits[2]; + gMC->Gsvolu("I050", "BOX ", idtmed[209], iI050dits, 3); // SDD sensitive volume dits[0] = 3.50850; @@ -2226,7 +2111,8 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ dits[18] = 57.45; dits[19] = 43.6; dits[20] = 48; - gMC->Gsvolu("IT56", "PCON", idtmed[220], dits, 21); + //gMC->Gsvolu("IT56", "PCON", idtmed[220], dits, 21); // SSD air + gMC->Gsvolu("IT56", "PCON", idtmed[204], dits, 21); // air dits[0] = 3.4; dits[1] = 1.955; @@ -3268,9 +3154,9 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ // -- position SDD detectors of ladder 3 / layer 3 gMC->Gspos("ITS3", 1,"I302", 0.0, 0.0, 0.0, 0, "ONLY"); - ySDD = Y_SDD_sep/2.+I302dits[1]; + ySDD = ySDDsep/2.+iI302dits[1]; for (iSDD=0; iSDD<6; iSDD++) { - gMC->Gspos("I302", iSDD+1, "I004", 0.0, ySDD, Z_SDD_lay3[iSDD], 0, "ONLY"); + gMC->Gspos("I302", iSDD+1, "I004", 0.0, ySDD, zSDDlay3[iSDD], 0, "ONLY"); ySDD = -ySDD; } @@ -3293,9 +3179,9 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ // -- position SDD detectors of ladder 4 / layer 4 gMC->Gspos("ITS4", 1,"I402", 0.0, 0.000, 0.0, 0,"ONLY"); - ySDD = -(Y_SDD_sep/2.+I402dits[1]); + ySDD = -(ySDDsep/2.+iI402dits[1]); for (iSDD=0; iSDD<8; iSDD++) { - gMC->Gspos("I402", iSDD+1, "I005", 0.0, ySDD, Z_SDD_lay4[iSDD], 0, "ONLY"); + gMC->Gspos("I402", iSDD+1, "I005", 0.0, ySDD, zSDDlay4[iSDD], 0, "ONLY"); ySDD = -ySDD; } @@ -3358,55 +3244,55 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ gMC->Gspos("I034", 3,"I018", -1.6, -1.775, 1.35, idrotm[348], "ONLY"); gMC->Gspos("I034", 4,"I018", 1.6, -1.775, -2.65, idrotm[312], "ONLY"); - gMC->Gspos("I035", 1,"I018", 1.7, -0.55, I018dits[2]-I035dits[2], 0, "MANY"); - gMC->Gspos("I035", 2,"I018", -1.7, -0.55, I018dits[2]-I035dits[2], 0, "MANY"); + gMC->Gspos("I035", 1,"I018", 1.7, -0.55, iI018dits[2]-iI035dits[2], 0, "MANY"); + gMC->Gspos("I035", 2,"I018", -1.7, -0.55, iI018dits[2]-iI035dits[2], 0, "MANY"); gMC->Gspos("I036", 1,"I018", 0.3087, 1.7191, 3.56, idrotm[346], "ONLY"); gMC->Gspos("I036", 2,"I018", 0.3087, 1.7191,-0.11, idrotm[346], "ONLY"); gMC->Gspos("I036", 3,"I018", -0.3087, 1.7191,-0.11, idrotm[347], "ONLY"); gMC->Gspos("I036", 4,"I018", -0.3087, 1.7191, 3.56, idrotm[347], "ONLY"); - gMC->Gspos("I037", 1,"I018", SDD_CoolPipe[0], SDD_CoolPipe[1], SDD_CoolPipe[2], 0 , "ONLY"); - gMC->Gspos("I037", 2,"I018", -SDD_CoolPipe[0], SDD_CoolPipe[1], SDD_CoolPipe[2], 0 , "ONLY"); + gMC->Gspos("I037", 1,"I018", iSDDCoolPipe[0], iSDDCoolPipe[1], iSDDCoolPipe[2], 0 , "ONLY"); + gMC->Gspos("I037", 2,"I018", -iSDDCoolPipe[0], iSDDCoolPipe[1], iSDDCoolPipe[2], 0 , "ONLY"); - gMC->Gspos("I038", 1,"I018", SDD_CoolPipe[0], SDD_CoolPipe[1], SDD_CoolPipe[2], 0 , "ONLY"); - gMC->Gspos("I038", 2,"I018", -SDD_CoolPipe[0], SDD_CoolPipe[1], SDD_CoolPipe[2], 0 , "ONLY"); + gMC->Gspos("I038", 1,"I018", iSDDCoolPipe[0], iSDDCoolPipe[1], iSDDCoolPipe[2], 0 , "ONLY"); + gMC->Gspos("I038", 2,"I018", -iSDDCoolPipe[0], iSDDCoolPipe[1], iSDDCoolPipe[2], 0 , "ONLY"); gMC->Gspos("I040", 1,"I018", 1.9204, -0.7118, 0.0, idrotm[346],"ONLY"); gMC->Gspos("I040", 2,"I018", -1.9204, -0.7118, 0.0, idrotm[347],"ONLY"); - gMC->Gspos("I041", 1,"I018", SDD_CoolPipe[0], SDD_CoolPipe[1], SDD_CoolPipe[2], idrotm[346], "ONLY"); - gMC->Gspos("I041", 2,"I018", -SDD_CoolPipe[0], SDD_CoolPipe[1], SDD_CoolPipe[2], idrotm[347], "ONLY"); + gMC->Gspos("I041", 1,"I018", iSDDCoolPipe[0], iSDDCoolPipe[1], iSDDCoolPipe[2], idrotm[346], "ONLY"); + gMC->Gspos("I041", 2,"I018", -iSDDCoolPipe[0], iSDDCoolPipe[1], iSDDCoolPipe[2], idrotm[347], "ONLY"); // -- build block of the SDD electronics (heat bridge, chips, hybrid, anode microcable) - xI050 = SDD_CoolPipe[0]+SDD_CoolPipe[1]*sin30+I050dits[1]/cos30+I041dits[1]; + xI050 = iSDDCoolPipe[0]+iSDDCoolPipe[1]*sin30+iI050dits[1]/cos30+iI041dits[1]; yI050 = 0; - xI039 = -SDD_CoolPipe[1]/cos30; - yI039 = -I050dits[1]+I039dits[1]; + xI039 = -iSDDCoolPipe[1]/cos30; + yI039 = -iI050dits[1]+iI039dits[1]; gMC->Gspos("I039", 1,"I050", xI039, yI039, 0.0, 0, "ONLY"); - xI042 = xI039+I039dits[0]-xI042space-I042dits[0]; - yI042 = yI039+I039dits[1]+I042dits[1]; - xI043 = xI039-I039dits[0]+xI043space+I043dits[0]; - yI043 = yI039+I039dits[1]+I043dits[1]; - zChipSpace = I042dits[2]; - if (zChipSpace < I043dits[2]) { - zChipSpace = I043dits[2]; + xI042 = xI039+iI039dits[0]-xI042space-iI042dits[0]; + yI042 = yI039+iI039dits[1]+iI042dits[1]; + xI043 = xI039-iI039dits[0]+xI043space+iI043dits[0]; + yI043 = yI039+iI039dits[1]+iI043dits[1]; + zChipSpace = iI042dits[2]; + if (zChipSpace < iI043dits[2]) { + zChipSpace = iI043dits[2]; } zChipSpace = zChipSpace * 2; - yI051space = (2*I039dits[2] - 4*zChipSpace)/5; - zchip = -I039dits[2] + yI051space + zChipSpace/2.; + yI051space = (2*iI039dits[2] - 4*zChipSpace)/5; + zchip = -iI039dits[2] + yI051space + zChipSpace/2.; for (ichip=0; ichip<4; ichip++) { gMC->Gspos("I042", ichip+1, "I050", xI042, yI042, zchip, 0, "ONLY"); gMC->Gspos("I043", ichip+1, "I050", xI043, yI043, zchip, 0, "ONLY"); zchip += zChipSpace + yI051space; } - xcap = 2*I039dits[0]/5.; - yI051 = yI039+I039dits[1]+I051dits[1]; - zI051 = -I039dits[2] + yI051space/3.; + xcap = 2*iI039dits[0]/5.; + yI051 = yI039+iI039dits[1]+iI051dits[1]; + zI051 = -iI039dits[2] + yI051space/3.; icap = 1; for (ichip=0; ichip<5; ichip++) { - xI051 = xI039-I039dits[0]+xcap; + xI051 = xI039-iI039dits[0]+xcap; gMC->Gspos("I051", icap++,"I050", xI051, yI051, zI051, 0, "ONLY"); zI051 += yI051space/3.; gMC->Gspos("I051", icap++,"I050", xI051, yI051, zI051, 0, "ONLY"); @@ -3422,11 +3308,11 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ } zI051 += zChipSpace + yI051space; } - xI052 = -I050dits[0]+I052dits[0]; - yI052 = yI051+I051dits[1]+I052dits[1]; + xI052 = -iI050dits[0]+iI052dits[0]; + yI052 = yI051+iI051dits[1]+iI052dits[1]; gMC->Gspos("I052", 1,"I050", xI052, yI052, 0.0, 0, "ONLY"); - xI044 = I050dits[0]-I044dits[3]; - yI044 = yI052+I052dits[1]+I044dits[2]; + xI044 = iI050dits[0]-iI044dits[3]; + yI044 = yI052+iI052dits[1]+iI044dits[2]; gMC->Gspos("I044", 1,"I050", xI044, yI044, 0.0, idrotm[301], "ONLY"); gMC->Gspos("I050", 1,"I018", xI050, yI050, 0.0, idrotm[346],"ONLY"); gMC->Gspos("I050", 2,"I018", -xI050, yI050, 0.0, idrotm[347],"ONLY"); @@ -3449,25 +3335,25 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ gMC->Gspos("I026", 1,"I024", -1.9782, -1.5689, 0.0, idrotm[342], "ONLY"); gMC->Gspos("I026", 2,"I024", 1.8824, -1.7349, 0.0, idrotm[344], "ONLY"); - gMC->Gspos("I029", 1,"I024", -0.087, 1.7067, I029dits[2]-I024dits[2], idrotm[342], "ONLY"); + gMC->Gspos("I029", 1,"I024", -0.087, 1.7067, iI029dits[2]-iI024dits[2], idrotm[342], "ONLY"); - gMC->Gspos("I030", 1,"I024", 0.0958, 1.6914, I030dits[2]-I024dits[2], idrotm[343], "ONLY"); + gMC->Gspos("I030", 1,"I024", 0.0958, 1.6914, iI030dits[2]-iI024dits[2], idrotm[343], "ONLY"); - gMC->Gspos("I031", 1,"I024", SDD_CoolPipe[0], SDD_CoolPipe[1], SDD_CoolPipe[2], 0 ,"ONLY"); - gMC->Gspos("I031", 2,"I024", -SDD_CoolPipe[0], SDD_CoolPipe[1], SDD_CoolPipe[2], 0 ,"ONLY"); + gMC->Gspos("I031", 1,"I024", iSDDCoolPipe[0], iSDDCoolPipe[1], iSDDCoolPipe[2], 0 ,"ONLY"); + gMC->Gspos("I031", 2,"I024", -iSDDCoolPipe[0], iSDDCoolPipe[1], iSDDCoolPipe[2], 0 ,"ONLY"); - gMC->Gspos("I032", 1,"I024", SDD_CoolPipe[0], SDD_CoolPipe[1], SDD_CoolPipe[2], 0 ,"ONLY"); - gMC->Gspos("I032", 2,"I024", -SDD_CoolPipe[0], SDD_CoolPipe[1], SDD_CoolPipe[2], 0 ,"ONLY"); + gMC->Gspos("I032", 1,"I024", iSDDCoolPipe[0], iSDDCoolPipe[1], iSDDCoolPipe[2], 0 ,"ONLY"); + gMC->Gspos("I032", 2,"I024", -iSDDCoolPipe[0], iSDDCoolPipe[1], iSDDCoolPipe[2], 0 ,"ONLY"); - xI424 = I028dits[0]/3.; - yI424 = -I028dits[1]+I424dits[1]; + xI424 = iI028dits[0]/3.; + yI424 = -iI028dits[1]+iI424dits[1]; gMC->Gspos("I422", 1,"I421", 0.0, 0.0, 0.0, 0, "ONLY"); - gMC->Gspos("I423", 1,"I421", 0.0, 0.0, I421dits[2]-I423dits[2], 0, "ONLY"); + gMC->Gspos("I423", 1,"I421", 0.0, 0.0, iI421dits[2]-iI423dits[2], 0, "ONLY"); gMC->Gspos("I421", 1,"I420", 0.0, 0.0, 0.0, idrotm[312], "ONLY"); - gMC->Gspos("I420", 1,"I028", -I028dits[0]/3., I028dits[1]-I420dits[1], 0.0, 0, "ONLY"); + gMC->Gspos("I420", 1,"I028", -iI028dits[0]/3., iI028dits[1]-iI420dits[1], 0.0, 0, "ONLY"); gMC->Gspos("I424", 1,"I028", xI424, yI424, 0.0, 0, "ONLY"); - gMC->Gspos("I028", 1,"I024", 0.0, I028dits[1]-I024dits[1], I024dits[2]-I028dits[2], 0, "MANY"); + gMC->Gspos("I028", 1,"I024", 0.0, iI028dits[1]-iI024dits[1], iI024dits[2]-iI028dits[2], 0, "MANY"); // -- build the SDD ladder 3 @@ -3481,43 +3367,43 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ gMC->Gspos("I018", 5,"I047", 0.0, 0.0, -10.95, 0, "ONLY"); gMC->Gspos("I018", 6,"I047", 0.0, 0.0, -18.25, 0, "ONLY"); gMC->Gspos("I024", 2,"I047", 0.0, 0.0, -24.625, idrotm[355], "ONLY"); - HVname[0] = 'I'; - HVname[1] = '3'; - HVname[2] = '1'; - HVname[4] = '\0'; + nameHV[0] = 'I'; + nameHV[1] = '3'; + nameHV[2] = '1'; + nameHV[4] = '\0'; for (iSDD=0; iSDD<3; iSDD++) { - HVname[3] = (Char_t)(48+iSDD+5); + nameHV[3] = (Char_t)(48+iSDD+5); dits[0] = 1.350000; - dits[1] = I425dits[1]; - dits[2] = (I047dits[2] - 2*I024dits[2] - Z_SDD_lay3[iSDD])/2.; - gMC->Gsvolu(HVname, "BOX ", idtmed[279], dits, 3); + dits[1] = iI425dits[1]; + dits[2] = (iI047dits[2] - 2*iI024dits[2] - zSDDlay3[iSDD])/2.; + gMC->Gsvolu(nameHV, "BOX ", idtmed[279], dits, 3); xHV = 0.0; - yHV = -I047dits[1] + (2*iSDD+1)*dits[1]; - zHV = I047dits[2] - 2*I024dits[2] - dits[2]; - gMC->Gspos(HVname, 1,"I047", xHV, yHV, zHV, 0, "ONLY"); - gMC->Gspos(HVname, 2,"I047", xHV, yHV, -zHV, 0, "ONLY"); + yHV = -iI047dits[1] + (2*iSDD+1)*dits[1]; + zHV = iI047dits[2] - 2*iI024dits[2] - dits[2]; + gMC->Gspos(nameHV, 1,"I047", xHV, yHV, zHV, 0, "ONLY"); + gMC->Gspos(nameHV, 2,"I047", xHV, yHV, -zHV, 0, "ONLY"); gMC->Gspos("I425", indI425++,"I047", xI424, yHV, 24.625, 0, "ONLY"); gMC->Gspos("I425", indI425++,"I047", -xI424, yHV, -24.625, 0, "ONLY"); } - LVname[0] = 'I'; - LVname[1] = '3'; - LVname[2] = '1'; - LVname[4] = '\0'; + nameLV[0] = 'I'; + nameLV[1] = '3'; + nameLV[2] = '1'; + nameLV[4] = '\0'; for (iSDD=0; iSDD<3; iSDD++) { - LVname[3] = (Char_t)(48+iSDD+1); + nameLV[3] = (Char_t)(48+iSDD+1); dits[0] = 1.350000; dits[1] = 0.004423; - dits[2] = (I047dits[2] - (2*iSDD+1)*I018dits[2] - I039dits[2])/2.; - gMC->Gsvolu(LVname, "BOX ", idtmed[280], dits, 3); - yLV = I018dits[1] - dits[0]*cos30 - dits[1]*sin30; + dits[2] = (iI047dits[2] - (2*iSDD+1)*iI018dits[2] - iI039dits[2])/2.; + gMC->Gsvolu(nameLV, "BOX ", idtmed[280], dits, 3); + yLV = iI018dits[1] - dits[0]*cos30 - dits[1]*sin30; xLV = xI050 - - fabs(yI050-yLV)*sin30/cos30 + - (I050dits[1]+(2*iSDD+1)*dits[1])/cos30; - zLV = I047dits[2] - dits[2]; - gMC->Gspos(LVname, 1,"I047", xLV, yLV, zLV, idrotm[346], "ONLY"); - gMC->Gspos(LVname, 2,"I047", xLV, yLV, -zLV, idrotm[346], "ONLY"); - gMC->Gspos(LVname, 3,"I047", -xLV, yLV, zLV, idrotm[347], "ONLY"); - gMC->Gspos(LVname, 4,"I047", -xLV, yLV, -zLV, idrotm[347], "ONLY"); + TMath::Abs(yI050-yLV)*sin30/cos30 + + (iI050dits[1]+(2*iSDD+1)*dits[1])/cos30; + zLV = iI047dits[2] - dits[2]; + gMC->Gspos(nameLV, 1,"I047", xLV, yLV, zLV, idrotm[346], "ONLY"); + gMC->Gspos(nameLV, 2,"I047", xLV, yLV, -zLV, idrotm[346], "ONLY"); + gMC->Gspos(nameLV, 3,"I047", -xLV, yLV, zLV, idrotm[347], "ONLY"); + gMC->Gspos(nameLV, 4,"I047", -xLV, yLV, -zLV, idrotm[347], "ONLY"); } @@ -3534,43 +3420,43 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ gMC->Gspos("I018",13,"I048", -0.0001, 0.0, -18.25, 0, "ONLY"); gMC->Gspos("I018",14,"I048", -0.0001, 0.0, -25.55, 0, "ONLY"); gMC->Gspos("I024", 4,"I048", -0.0001, 0.0, -31.925, idrotm[355], "ONLY"); - HVname[0] = 'I'; - HVname[1] = '4'; - HVname[2] = '1'; - HVname[4] = '\0'; + nameHV[0] = 'I'; + nameHV[1] = '4'; + nameHV[2] = '1'; + nameHV[4] = '\0'; for (iSDD=0; iSDD<4; iSDD++) { - HVname[3] = (Char_t)(48+iSDD+5); + nameHV[3] = (Char_t)(48+iSDD+5); dits[0] = 1.350000; - dits[1] = I425dits[1]; - dits[2] = (I048dits[2] - 2*I024dits[2] - Z_SDD_lay4[iSDD])/2.; - gMC->Gsvolu(HVname, "BOX ", idtmed[279], dits, 3); + dits[1] = iI425dits[1]; + dits[2] = (iI048dits[2] - 2*iI024dits[2] - zSDDlay4[iSDD])/2.; + gMC->Gsvolu(nameHV, "BOX ", idtmed[279], dits, 3); xHV = -0.0001; - yHV = -I048dits[1] + (2*iSDD+1)*dits[1]; - zHV = I048dits[2] - 2*I024dits[2] - dits[2]; - gMC->Gspos(HVname, 1,"I048", xHV, yHV, zHV, 0, "ONLY"); - gMC->Gspos(HVname, 2,"I048", xHV, yHV, -zHV, 0, "ONLY"); + yHV = -iI048dits[1] + (2*iSDD+1)*dits[1]; + zHV = iI048dits[2] - 2*iI024dits[2] - dits[2]; + gMC->Gspos(nameHV, 1,"I048", xHV, yHV, zHV, 0, "ONLY"); + gMC->Gspos(nameHV, 2,"I048", xHV, yHV, -zHV, 0, "ONLY"); gMC->Gspos("I425", indI425++,"I048", xI424, yHV, 31.925, 0, "ONLY"); gMC->Gspos("I425", indI425++,"I048", -xI424, yHV, -31.925, 0, "ONLY"); } - LVname[0] = 'I'; - LVname[1] = '4'; - LVname[2] = '1'; - LVname[4] = '\0'; + nameLV[0] = 'I'; + nameLV[1] = '4'; + nameLV[2] = '1'; + nameLV[4] = '\0'; for (iSDD=0; iSDD<4; iSDD++) { - LVname[3] = (Char_t)(48+iSDD+1); + nameLV[3] = (Char_t)(48+iSDD+1); dits[0] = 1.350000; dits[1] = 0.004423; - dits[2] = (I048dits[2] - (2*iSDD+1)*I018dits[2] - I039dits[2])/2.; - gMC->Gsvolu(LVname, "BOX ", idtmed[280], dits, 3); - yLV = I018dits[1] - dits[0]*cos30 - dits[1]*sin30; + dits[2] = (iI048dits[2] - (2*iSDD+1)*iI018dits[2] - iI039dits[2])/2.; + gMC->Gsvolu(nameLV, "BOX ", idtmed[280], dits, 3); + yLV = iI018dits[1] - dits[0]*cos30 - dits[1]*sin30; xLV = xI050 - - fabs(yI050-yLV)*sin30/cos30 + - (I050dits[1]+(2*iSDD+1)*dits[1])/cos30; - zLV = I048dits[2] - dits[2]; - gMC->Gspos(LVname, 1,"I048", xLV, yLV, zLV, idrotm[346], "ONLY"); - gMC->Gspos(LVname, 2,"I048", xLV, yLV, -zLV, idrotm[346], "ONLY"); - gMC->Gspos(LVname, 3,"I048", -xLV, yLV, zLV, idrotm[347], "ONLY"); - gMC->Gspos(LVname, 4,"I048", -xLV, yLV, -zLV, idrotm[347], "ONLY"); + TMath::Abs(yI050-yLV)*sin30/cos30 + + (iI050dits[1]+(2*iSDD+1)*dits[1])/cos30; + zLV = iI048dits[2] - dits[2]; + gMC->Gspos(nameLV, 1,"I048", xLV, yLV, zLV, idrotm[346], "ONLY"); + gMC->Gspos(nameLV, 2,"I048", xLV, yLV, -zLV, idrotm[346], "ONLY"); + gMC->Gspos(nameLV, 3,"I048", -xLV, yLV, zLV, idrotm[347], "ONLY"); + gMC->Gspos(nameLV, 4,"I048", -xLV, yLV, -zLV, idrotm[347], "ONLY"); } @@ -4109,10 +3995,10 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ gMC->Gspos("I200",21,"IS02",0.0,0.0,0.0,idrotm[892],"ONLY"); gMC->Gspos("I200",20,"IS02",0.0,0.0,0.0,idrotm[868],"ONLY"); gMC->Gspos("I200",19,"IS02",0.0,0.0,0.0,idrotm[893],"ONLY"); - gMC->Gspos("I098",1,"IS02",0.0,0.0,33.6,0,"ONLY"); - gMC->Gspos("I097",1,"IS02",0.0,0.0,26.6,0,"ONLY"); - gMC->Gspos("I097",2,"IS02",0.0,0.0,-26.6,idrotm[856],"ONLY"); - gMC->Gspos("I098",2,"IS02",0.0,0.0,-33.6,idrotm[856],"ONLY"); + gMC->Gspos("I098",1,"IS02",0.0,0.0,33.6,0,"MANY"); + gMC->Gspos("I097",1,"IS02",0.0,0.0,26.6,0,"MANY"); + gMC->Gspos("I097",2,"IS02",0.0,0.0,-26.6,idrotm[856],"MANY"); + gMC->Gspos("I098",2,"IS02",0.0,0.0,-33.6,idrotm[856],"MANY"); gMC->Gspos("I202",1,"IS02",12.1,0.0,33.84,0,"ONLY"); gMC->Gspos("I202",6,"IS02",-6.05,-10.4789,33.84,idrotm[930],"ONLY"); gMC->Gspos("I202",5,"IS02",-6.05,10.4789,33.84,idrotm[929],"ONLY"); @@ -4227,11 +4113,11 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ // --- Place subdetectors' mother volumes and supports' mother volumes // into ITS mother volume ITSD - gMC->Gspos("IT12",1,"ITSD",0.0,0.0,0.0,0,"ONLY"); // SPD mother volume - gMC->Gspos("IT34",1,"ITSD",0.0,0.0,0.0,0,"ONLY"); // SDD mother volume - gMC->Gspos("IT56",1,"ITSD",0.0,0.0,0.0,0,"ONLY"); // SSD mother volume - gMC->Gspos("IS02",1,"ITSD",0.0,0.0,0.0,0,"ONLY"); // SDD cones/supports - gMC->Gspos("IS01",1,"ITSD",0.0,0.0,0.0,0,"ONLY"); // SSD cones/supports + gMC->Gspos("IT12",1,"ITSD",0.0,0.0,0.0,0,"MANY"); // SPD mother volume + gMC->Gspos("IT34",1,"ITSD",0.0,0.0,0.0,0,"MANY"); // SDD mother volume + gMC->Gspos("IT56",1,"ITSD",0.0,0.0,0.0,0,"MANY"); // SSD mother volume + gMC->Gspos("IS02",1,"ITSD",0.0,0.0,0.0,0,"MANY"); // SDD cones/supports + gMC->Gspos("IS01",1,"ITSD",0.0,0.0,0.0,0,"MANY"); // SSD cones/supports // **************************** SERVICES ********************************* @@ -4374,7 +4260,7 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ // -- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - COPPER PART // UPPER PART - dgh[0] = 62.1; + dgh[0] = 62.; dgh[1] = 74.5; dgh[2] = 0.5; dgh[3] = 12.; @@ -4385,7 +4271,7 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ // -- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - COPPER PART // LOWER PART - dgh[0] = 62.1; + dgh[0] = 62.; dgh[1] = 74.5; dgh[2] = 0.5; dgh[3] = 192.; @@ -4551,8 +4437,8 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ dgh[1] = 59.; dgh[2] = 0.6; gMC->Gsvolu("ICYL", "TUBE", idtmed[210], dgh, 3); - gMC->Gspos("ICYL", 1, "ALIC", 0., 0., 74.1, 0, "ONLY"); - gMC->Gspos("ICYL", 2, "ALIC", 0., 0., -74.1, idrotm[200], "ONLY"); + gMC->Gspos("ICYL", 1, "ALIC", 0., 0., -74.1,idrotm[199], "ONLY"); + gMC->Gspos("ICYL", 2, "ALIC", 0., 0., 74.1, 0, "ONLY"); // --- DEFINE SUPPORTS FOR RAILS ATTACHED TO THE CYLINDERS @@ -4575,9 +4461,9 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ dgh[1] = 12.; dgh[2] = 5.; gMC->Gsvolu("ISR2", "BOX ", idtmed[210], dgh, 3); - gMC->Gspos("ISR2", 1, "ALIC", 53.5, 0., 125.5, 0, "ONLY"); + gMC->Gspos("ISR2", 1, "ITSV", -53.5, 0., -125.5, idrotm[199], "MANY"); gMC->Gsvolu("ISR3", "BOX ", idtmed[210], dgh, 3); - gMC->Gspos("ISR3", 1, "ALIC", -53.5, 0., 125.5, 0, "ONLY"); + gMC->Gspos("ISR3", 1, "ITSV", 53.5, 0., -125.5, idrotm[199], "MANY"); dgh[0] = 5.-2.; dgh[1] = 12.-2.; @@ -4593,9 +4479,9 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ dgh[1] = 5.; dgh[2] = 2.; gMC->Gsvolu("ISR6", "TUBE", idtmed[210], dgh, 3); - gMC->Gspos("ISR6", 1, "ALIC", 0., 54., 77., 0, "ONLY"); - gMC->Gspos("ISR6", 2, "ALIC", 0., 54., -77., 0, "ONLY"); - gMC->Gspos("ISR6", 3, "ALIC", 0., -54., -77., 0, "ONLY"); + gMC->Gspos("ISR6", 1, "ITSV", 0., 54., -77., idrotm[199], "MANY"); + gMC->Gspos("ISR6", 2, "ITSV", 0., 54., 77., idrotm[199], "MANY"); + gMC->Gspos("ISR6", 3, "ITSV", 0., -54., 77., idrotm[199], "MANY"); // --- Outputs the geometry tree in the EUCLID/CAD format @@ -4603,6 +4489,222 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ gMC->WriteEuclid("ITSgeometry", "ITSV", 1, 5); } + + { + if (!gGeoManager) { + AliError("TGeoManager doesn't exist !"); + return; + } + + //====== Converting mother volumes of alignable objects + //====== into TGeoAssemblies : + + TObjArray *list = gGeoManager->GetListOfVolumes(); + + { + char spdLaddName[20] = "I10B"; + + TGeoVolume *toTransform = gGeoManager->FindVolumeFast(spdLaddName); + Int_t index = list->IndexOf(toTransform); + do { + TGeoVolume *transformed = 0; // this will be in fact TGeoVolumeAssembly + if (toTransform) + transformed = TGeoVolumeAssembly::MakeAssemblyFromVolume(toTransform); + if (transformed) + gGeoManager->ReplaceVolume(toTransform, transformed); + index++; + toTransform = (TGeoVolume*)list->At(index); + } + while (strcmp(spdLaddName,toTransform->GetName()) == 0); + } + + // SPD 2 + { + char spdLaddName[20] = "I20B"; + + TGeoVolume *toTransform = gGeoManager->FindVolumeFast(spdLaddName); + Int_t index = list->IndexOf(toTransform); + do { + TGeoVolume *transformed = 0; // this will be in fact TGeoVolumeAssembly + if (toTransform) + transformed = TGeoVolumeAssembly::MakeAssemblyFromVolume(toTransform); + if (transformed) + gGeoManager->ReplaceVolume(toTransform, transformed); + index++; + toTransform = (TGeoVolume*)list->At(index); + } + while (strcmp(spdLaddName, toTransform->GetName()) == 0); + } + + //--- + + // SPD 1 + { + char spdLaddName[20] = "I107"; // "I107" + + TGeoVolume *toTransform = gGeoManager->FindVolumeFast(spdLaddName); + Int_t index = list->IndexOf(toTransform); + do { + TGeoVolume *transformed = 0; // this will be in fact TGeoVolumeAssembly + if (toTransform) + transformed = TGeoVolumeAssembly::MakeAssemblyFromVolume(toTransform); + if (transformed) + gGeoManager->ReplaceVolume(toTransform, transformed); + index++; + toTransform = (TGeoVolume*)list->At(index); + } + while (strcmp(spdLaddName,toTransform->GetName()) == 0); + } + + // SPD 2 + { + char spdLaddName[20] = "I1D7"; // "I1D7" + + TGeoVolume *toTransform = gGeoManager->FindVolumeFast(spdLaddName); + Int_t index = list->IndexOf(toTransform); + do { + TGeoVolume *transformed = 0; // this will be in fact TGeoVolumeAssembly + if (toTransform) + transformed = TGeoVolumeAssembly::MakeAssemblyFromVolume(toTransform); + if (transformed) + gGeoManager->ReplaceVolume(toTransform, transformed); + index++; + toTransform = (TGeoVolume*)list->At(index); + } + while (strcmp(spdLaddName, toTransform->GetName()) == 0); + } + + // SDD 1 + { + char sddLaddName[20] = "I004";// "I302" + + TGeoVolume *toTransform = gGeoManager->FindVolumeFast(sddLaddName); + Int_t index = list->IndexOf(toTransform); + do { + TGeoVolume *transformed = 0; // this will be in fact TGeoVolumeAssembly + if (toTransform) + transformed = TGeoVolumeAssembly::MakeAssemblyFromVolume(toTransform); + if (transformed) + gGeoManager->ReplaceVolume(toTransform, transformed); + index++; + toTransform = (TGeoVolume*)list->At(index); + } + while (strcmp(sddLaddName, toTransform->GetName()) == 0); + } + + // SDD 2 + { + char sddLaddName[20] = "I005";// "I402" + + TGeoVolume *toTransform = gGeoManager->FindVolumeFast(sddLaddName); + Int_t index = list->IndexOf(toTransform); + do { + TGeoVolume *transformed = 0; // this will be in fact TGeoVolumeAssembly + if (toTransform) + transformed = TGeoVolumeAssembly::MakeAssemblyFromVolume(toTransform); + if (transformed) + gGeoManager->ReplaceVolume(toTransform, transformed); + index++; + toTransform = (TGeoVolume*)list->At(index); + } + while (strcmp(sddLaddName, toTransform->GetName()) == 0); + } + + + // SSD 1 + { + char ssdLaddName[20] = "I565";// "I562" + + TGeoVolume *toTransform = gGeoManager->FindVolumeFast(ssdLaddName); + Int_t index = list->IndexOf(toTransform); + do { + TGeoVolume *transformed = 0; // this will be in fact TGeoVolumeAssembly + if (toTransform) + transformed = TGeoVolumeAssembly::MakeAssemblyFromVolume(toTransform); + if (transformed) + gGeoManager->ReplaceVolume(toTransform, transformed); + index++; + toTransform = (TGeoVolume*)list->At(index); + } + while (strcmp(ssdLaddName,toTransform->GetName()) == 0); + } + + // SSD 2 + { + char ssdLaddName[20] = "I569";// "I566" + + TGeoVolume *toTransform = gGeoManager->FindVolumeFast(ssdLaddName); + Int_t index = list->IndexOf(toTransform); + do { + TGeoVolume *transformed = 0; // this will be in fact TGeoVolumeAssembly + if (toTransform) + transformed = TGeoVolumeAssembly::MakeAssemblyFromVolume(toTransform); + if (transformed) + gGeoManager->ReplaceVolume(toTransform, transformed); + index++; + toTransform = (TGeoVolume*)list->At(index); + } + while (strcmp(ssdLaddName, toTransform->GetName()) == 0); + } + + + //====== Converting some virtual volumes to assemblies in order + //====== to avoid overlaps : + + { + char sddName[20] = "I047"; + + TGeoVolume *toTransform = gGeoManager->FindVolumeFast(sddName); + Int_t index = list->IndexOf(toTransform); + do { + TGeoVolume *transformed = 0; // this will be in fact TGeoVolumeAssembly + if (toTransform) + transformed = TGeoVolumeAssembly::MakeAssemblyFromVolume(toTransform); + if (transformed) + gGeoManager->ReplaceVolume(toTransform, transformed); + index++; + toTransform = (TGeoVolume*)list->At(index); + } + while (strcmp(sddName, toTransform->GetName()) == 0); + } + + { + char sddName[20] = "I048"; + + TGeoVolume *toTransform = gGeoManager->FindVolumeFast(sddName); + Int_t index = list->IndexOf(toTransform); + do { + TGeoVolume *transformed = 0; // this will be in fact TGeoVolumeAssembly + if (toTransform) + transformed = TGeoVolumeAssembly::MakeAssemblyFromVolume(toTransform); + if (transformed) + gGeoManager->ReplaceVolume(toTransform, transformed); + index++; + toTransform = (TGeoVolume*)list->At(index); + } + while (strcmp(sddName, toTransform->GetName()) == 0); + } + + { + char sddName[20] = "I018"; + + TGeoVolume *toTransform = gGeoManager->FindVolumeFast(sddName); + Int_t index = list->IndexOf(toTransform); + do { + TGeoVolume *transformed = 0; // this will be in fact TGeoVolumeAssembly + if (toTransform) + transformed = TGeoVolumeAssembly::MakeAssemblyFromVolume(toTransform); + if (transformed) + gGeoManager->ReplaceVolume(toTransform, transformed); + index++; + toTransform = (TGeoVolume*)list->At(index); + } + while (strcmp(sddName, toTransform->GetName()) == 0); + } + + + } + } //______________________________________________________________________ void AliITSvPPRasymmFMD::CreateMaterials(){ @@ -4649,20 +4751,141 @@ void AliITSvPPRasymmFMD::CreateMaterials(){ Float_t epsilServ = 1.0E-3; // 0.003; // cm Float_t stminServ = 0.0; //0.003; // cm "Default value used" - // Freon + // Freon PerFluorobuthane C4F10 see + // http://st-support-cooling-electronics.web.cern.ch/ + // st-support-cooling-electronics/default.htm Float_t afre[2] = { 12.011,18.9984032 }; Float_t zfre[2] = { 6., 9. }; - Float_t wfre[2] = { 5.,12. }; - Float_t densfre = 1.5; - - // --- Define the various materials and media for GEANT --- - // AliMaterial(Int_t imat, const char* name, Float_t a, Float_t z, - // Float_t dens, Float_t radl, Float_t absl, - // Float_t *buf=0, Int_t nwbuf=0) - //AliMedium(Int_t numed, const char *name, Int_t nmat, - // Int_t isvol, Int_t ifield, Float_t fieldm, - // Float_t tmaxfd, Float_t stemax, Float_t deemax, - // Float_t epsil, Float_t stmin, Float_t *ubuf=0, Int_t nbuf=0) + Float_t wfre[2] = { 4.,10. }; + Float_t densfre = 1.52; + + + //CM55J + + Float_t aCM55J[4]={12.0107,14.0067,15.9994,1.00794}; + Float_t zCM55J[4]={6.,7.,8.,1.}; + Float_t wCM55J[4]={0.908508078,0.010387573,0.055957585,0.025146765}; + Float_t dCM55J = 1.63; + + //ALCM55J + + Float_t aALCM55J[5]={12.0107,14.0067,15.9994,1.00794,26.981538}; + Float_t zALCM55J[5]={6.,7.,8.,1.,13.}; + Float_t wALCM55J[5]={0.817657902,0.0093488157,0.0503618265,0.0226320885,0.1}; + Float_t dALCM55J = 1.9866; + + //Si Chips + + Float_t aSICHIP[6]={12.0107,14.0067,15.9994,1.00794,28.0855,107.8682}; + Float_t zSICHIP[6]={6.,7.,8.,1.,14., 47.}; + Float_t wSICHIP[6]={0.039730642,0.001396798,0.01169634,0.004367771,0.844665,0.09814344903}; + Float_t dSICHIP = 2.36436; + + //Inox + + Float_t aINOX[9]={12.0107,54.9380, 28.0855,30.9738,32.066,58.6928,55.9961,95.94,55.845}; + Float_t zINOX[9]={6.,25.,14.,15.,16., 28.,24.,42.,26.}; + Float_t wINOX[9]={0.0003,0.02,0.01,0.00045,0.0003,0.12,0.17,0.025,0.654}; + Float_t dINOX = 8.03; + + //SDD HV microcable + + Float_t aHVm[5]={12.0107,1.00794,14.0067,15.9994,26.981538}; + Float_t zHVm[5]={6.,1.,7.,8.,13.}; + Float_t wHVm[5]={0.520088819984,0.01983871336,0.0551367996,0.157399667056, 0.247536}; + Float_t dHVm = 1.6087; + + //SDD LV+signal cable + + Float_t aLVm[5]={12.0107,1.00794,14.0067,15.9994,26.981538}; + Float_t zLVm[5]={6.,1.,7.,8.,13.}; + Float_t wLVm[5]={0.21722436468,0.0082859922,0.023028867,0.06574077612, 0.68572}; + Float_t dLVm = 2.1035; + + //SDD hybrid microcab + + Float_t aHLVm[5]={12.0107,1.00794,14.0067,15.9994,26.981538}; + Float_t zHLVm[5]={6.,1.,7.,8.,13.}; + Float_t wHLVm[5]={0.24281879711,0.00926228815,0.02574224025,0.07348667449, 0.64869}; + Float_t dHLVm = 2.0502; + + //SDD anode microcab + + Float_t aALVm[5]={12.0107,1.00794,14.0067,15.9994,26.981538}; + Float_t zALVm[5]={6.,1.,7.,8.,13.}; + Float_t wALVm[5]={0.392653705471,0.0128595919215,0.041626868025,0.118832707289, 0.431909}; + Float_t dALVm = 2.0502; + + //X7R capacitors + + Float_t aX7R[7]={137.327,47.867,15.9994,58.6928,63.5460,118.710,207.2}; + Float_t zX7R[7]={56.,22.,8.,28.,29.,50.,82.}; + Float_t wX7R[7]={0.251639432,0.084755042,0.085975822,0.038244751,0.009471271,0.321736471,0.2081768}; + Float_t dX7R = 7.14567; + + // AIR + + Float_t aAir[4]={12.0107,14.0067,15.9994,39.948}; + Float_t zAir[4]={6.,7.,8.,18.}; + Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827}; + Float_t dAir = 1.20479E-3; + + // Water + + Float_t aWater[2]={1.00794,15.9994}; + Float_t zWater[2]={1.,8.}; + Float_t wWater[2]={0.111894,0.888106}; + Float_t dWater = 1.0; + + // CERAMICS + // 94.4% Al2O3 , 2.8% SiO2 , 2.3% MnO , 0.5% Cr2O3 + Float_t acer[5] = { 26.981539,15.9994,28.0855,54.93805,51.9961 }; + Float_t zcer[5] = { 13., 8., 14., 25., 24. }; + Float_t wcer[5] = {.4443408,.5213375,.0130872,.0178135,.003421}; + Float_t denscer = 3.6; + + //G10FR4 + + Float_t zG10FR4[14] = {14.00, 20.00, 13.00, 12.00, 5.00, 22.00, 11.00, 19.00, 26.00, 9.00, 8.00, 6.00, 7.00, 1.00}; + Float_t aG10FR4[14] = {28.0855000,40.0780000,26.9815380,24.3050000,10.8110000,47.8670000,22.9897700,39.0983000,55.8450000,18.9984000,15.9994000,12.0107000,14.0067000,1.0079400}; + Float_t wG10FR4[14] = {0.15144894,0.08147477,0.04128158,0.00904554,0.01397570,0.00287685,0.00445114,0.00498089,0.00209828,0.00420000,0.36043788,0.27529426,0.01415852,0.03427566}; + Float_t densG10FR4= 1.8; + + //--- EPOXY --- C18 H19 O3 + Float_t aEpoxy[3] = {15.9994, 1.00794, 12.0107} ; + Float_t zEpoxy[3] = { 8., 1., 6.} ; + Float_t wEpoxy[3] = { 3., 19., 18.} ; + Float_t dEpoxy = 1.8 ; + + // rohacell: C9 H13 N1 O2 + Float_t arohac[4] = {12.01, 1.01, 14.010, 16.}; + Float_t zrohac[4] = { 6., 1., 7., 8.}; + Float_t wrohac[4] = { 9., 13., 1., 2.}; + Float_t drohac = 0.05; + + // If he/she means stainless steel (inox) + Aluminium and Zeff=15.3383 then +// +// %Al=81.6164 %inox=100-%Al + + Float_t aInAl[5] = {27., 55.847,51.9961,58.6934,28.0855 }; + Float_t zInAl[5] = {13., 26.,24.,28.,14. }; + Float_t wInAl[5] = {.816164, .131443,.0330906,.0183836,.000919182}; + Float_t dInAl = 3.075; + + // Kapton + + Float_t aKapton[4]={1.00794,12.0107, 14.010,15.9994}; + Float_t zKapton[4]={1.,6.,7.,8.}; + Float_t wKapton[4]={0.026362,0.69113,0.07327,0.209235}; + Float_t dKapton = 1.42; + + //SDD ruby sph. + Float_t aAlOxide[2] = { 26.981539,15.9994}; + Float_t zAlOxide[2] = { 13., 8.}; + Float_t wAlOxide[2] = {0.4707, 0.5293}; + Float_t dAlOxide = 3.97; + + AliMaterial(1,"SI$",0.28086E+02,0.14000E+02,0.23300E+01,0.93600E+01,0.99900E+03); AliMedium(1,"SI$",1,0,ifield,fieldm,tmaxfdSi,stemaxSi,deemaxSi,epsilSi,stminSi); @@ -4672,28 +4895,28 @@ void AliITSvPPRasymmFMD::CreateMaterials(){ AliMaterial(3,"SPD SI BUS$",0.28086E+02,0.14000E+02,0.23300E+01,0.93600E+01,0.99900E+03); AliMedium(3,"SPD SI BUS$",3,0,ifield,fieldm,tmaxfdSi,stemaxSi,deemaxSi,epsilSi,stminSi); - AliMaterial(4,"C (M55J)$",0.12011E+02,0.60000E+01,0.1930E+01,0.22100E+02,0.99900E+03); + AliMixture(4,"C (M55J)$",aCM55J,zCM55J,dCM55J,4,wCM55J); AliMedium(4,"C (M55J)$",4,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); - AliMaterial(5,"AIR$",0.14610E+02,0.73000E+01,0.12050E-02,0.30423E+05,0.99900E+03); + AliMixture(5,"AIR$",aAir,zAir,dAir,4,wAir); AliMedium(5,"AIR$",5,0,ifield,fieldm,tmaxfdAir,stemaxAir,deemaxAir,epsilAir,stminAir); - AliMaterial(6,"GEN AIR$",0.14610E+02,0.73000E+01,0.12050E-02,0.30423E+05,0.99900E+03); + AliMixture(6,"GEN AIR$",aAir,zAir,dAir,4,wAir); AliMedium(6,"GEN AIR$",6,0,ifield,fieldm,tmaxfdAir,stemaxAir,deemaxAir,epsilAir,stminAir); - AliMaterial(7,"SDD SI CHIP$",0.374952E+02,0.178184E+02,0.24485E+01,0.76931E+01,0.99900E+03); + AliMixture(7,"SDD SI CHIP$",aSICHIP,zSICHIP,dSICHIP,6,wSICHIP); AliMedium(7,"SDD SI CHIP$",7,0,ifield,fieldm,tmaxfdSi,stemaxSi,deemaxSi,epsilSi,stminSi); - AliMaterial(9,"SDD C (M55J)$",0.123565E+02,0.64561E+01,0.18097E+01,0.229570E+02,0.99900E+03); + AliMixture(9,"SDD C (M55J)$",aCM55J,zCM55J,dCM55J,4,wCM55J); AliMedium(9,"SDD C (M55J)$",9,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); - AliMaterial(10,"SDD AIR$",0.14610E+02,0.73000E+01,0.12050E-02,0.30423E+05,0.99900E+03); + AliMixture(10,"SDD AIR$",aAir,zAir,dAir,4,wAir); AliMedium(10,"SDD AIR$",10,0,ifield,fieldm,tmaxfdAir,stemaxAir,deemaxAir,epsilAir,stminAir); AliMaterial(11,"AL$",0.26982E+02,0.13000E+02,0.26989E+01,0.89000E+01,0.99900E+03); AliMedium(11,"AL$",11,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); - AliMaterial(12,"WATER$",0.14322E+02,0.72167E+01,0.10000E+01,0.35759E+02,0.94951E+02); + AliMixture(12, "Water$",aWater,zWater,dWater,2,wWater); AliMedium(12,"WATER$",12,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); AliMixture(13,"Freon$",afre,zfre,densfre,-2,wfre); @@ -4701,23 +4924,22 @@ void AliITSvPPRasymmFMD::CreateMaterials(){ AliMaterial(14,"COPPER$",0.63546E+02,0.29000E+02,0.89600E+01,0.14300E+01,0.99900E+03); AliMedium(14,"COPPER$",14,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); - - AliMaterial(15,"CERAMICS$",0.22314E+02,0.10856E+02,0.36000E+01,0.76200E+01,0.31901E+02); + AliMixture(15,"CERAMICS$",acer,zcer,denscer,5,wcer); AliMedium(15,"CERAMICS$",15,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); - AliMaterial(20,"SSD C (M55J)$",0.12011E+02,0.60000E+01,0.1930E+01,0.22100E+02,0.99900E+03); + AliMixture(20,"SSD C (M55J)$",aCM55J,zCM55J,dCM55J,4,wCM55J); AliMedium(20,"SSD C (M55J)$",20,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); - AliMaterial(21,"SSD AIR$",0.14610E+02,0.73000E+01,0.12050E-02,0.30423E+05,0.99900E+03); + AliMixture(21,"SSD AIR$",aAir,zAir,dAir,4,wAir); AliMedium(21,"SSD AIR$",21,0,ifield,fieldm,tmaxfdAir,stemaxAir,deemaxAir,epsilAir,stminAir); - AliMaterial(25,"G10FR4$",0.17749E+02,0.88750E+01,0.18000E+01,0.21822E+02,0.99900E+03); + AliMixture(25,"G10FR4$",aG10FR4,zG10FR4,densG10FR4,14,wG10FR4); AliMedium(25,"G10FR4$",25,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); - AliMaterial(26,"GEN C (M55J)$",0.12011E+02,0.60000E+01,0.1930E+01,0.22100E+02,0.99900E+03); + AliMixture(26,"GEN C (M55J)$",aCM55J,zCM55J,dCM55J,4,wCM55J); AliMedium(26,"GEN C (M55J)$",26,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); - AliMaterial(27,"GEN Air$",0.14610E+02,0.73000E+01,0.12050E-02,0.30423E+05,0.99900E+03); + AliMixture(27,"GEN Air$",aAir,zAir,dAir,4,wAir); AliMedium(27,"GEN Air$",27,0,ifield,fieldm,tmaxfdAir,stemaxAir,deemaxAir,epsilAir,stminAir); AliMaterial(51,"SPD SI$",0.28086E+02,0.14000E+02,0.23300E+01,0.93600E+01,0.99900E+03); @@ -4729,40 +4951,40 @@ void AliITSvPPRasymmFMD::CreateMaterials(){ AliMaterial(53,"SPD SI BUS$",0.28086E+02,0.14000E+02,0.23300E+01,0.93600E+01,0.99900E+03); AliMedium(53,"SPD SI BUS$",53,0,ifield,fieldm,tmaxfdSi,stemaxSi,deemaxSi,epsilSi,stminSi); - AliMaterial(54,"SPD C (M55J)$",0.12011E+02,0.60000E+01,0.1930E+01,0.22100E+02,0.99900E+03); + AliMixture(54,"SPD C (M55J)$",aCM55J,zCM55J,dCM55J,4,wCM55J); AliMedium(54,"SPD C (M55J)$",54,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); - AliMaterial(55,"SPD AIR$",0.14610E+02,0.73000E+01,0.12050E-02,0.30423E+05,0.99900E+03); + AliMixture(55,"SPD AIR$",aAir,zAir,dAir,4,wAir); AliMedium(55,"SPD AIR$",55,0,ifield,fieldm,tmaxfdAir,stemaxAir,deemaxAir,epsilAir,stminAir); - AliMaterial(56,"SPD KAPTON(POLYCH2)$",0.14000E+02,0.71770E+01,0.13000E+01,0.31270E+02,0.99900E+03); + AliMixture(56, "SPD KAPTON(POLYCH2)", aKapton, zKapton, dKapton, 4, wKapton); AliMedium(56,"SPD KAPTON(POLYCH2)$",56,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); - AliMaterial(61,"EPOXY$",0.17749E+02,0.88750E+01,0.18000E+01,0.21822E+02,0.99900E+03); + AliMixture(61,"EPOXY$",aEpoxy,zEpoxy,dEpoxy,-3,wEpoxy); AliMedium(61,"EPOXY$",61,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); AliMaterial(62,"SILICON$",0.28086E+02,0.14000E+02,0.23300E+01,0.93600E+01,0.99900E+03); AliMedium(62,"SILICON$",62,0,ifield,fieldm,tmaxfdSi,stemaxSi,deemaxSi,epsilSi,stminSi); - AliMaterial(63,"KAPTONH(POLYCH2)$",0.14000E+02,0.71770E+01,0.13000E+01,0.31270E+02,0.99900E+03); + AliMixture(63, "KAPTONH(POLYCH2)", aKapton, zKapton, dKapton, 4, wKapton); AliMedium(63,"KAPTONH(POLYCH2)$",63,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); AliMaterial(64,"ALUMINUM$",0.26982E+02,0.13000E+02,0.26989E+01,0.89000E+01,0.99900E+03); AliMedium(64,"ALUMINUM$",64,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); - AliMaterial(65,"INOX$",0.55098E+02,0.2572E+02,0.7900E+01,0.17800E+01,0.99900E+03); + AliMixture(65,"INOX$",aINOX,zINOX,dINOX,9,wINOX); AliMedium(65,"INOX$",65,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); - AliMaterial(68,"ROHACELL$",0.123974E+02,0.62363E+01,0.500E-01,0.80986E+03,0.99900E+03); + AliMixture(68,"ROHACELL$",arohac,zrohac,drohac,-4,wrohac); AliMedium(68,"ROHACELL$",68,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); - AliMaterial(69,"SDD C AL (M55J)$",0.138802E+02,0.71315E+01,0.19837E+01,0.176542E+02,0.99900E+03); + AliMixture(69,"SDD C AL (M55J)$",aALCM55J,zALCM55J,dALCM55J,5,wALCM55J); AliMedium(69,"SDD C AL (M55J)$",69,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); - AliMaterial(70,"SDDKAPTON (POLYCH2)$",0.14000E+02,0.71770E+01,0.13000E+01,0.31270E+02,0.99900E+03); + AliMixture(70, "SDDKAPTON (POLYCH2)", aKapton, zKapton, dKapton, 4, wKapton); AliMedium(70,"SDDKAPTON (POLYCH2)$",70,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); - AliMaterial(71,"ITS SANDW A$",0.12011E+02,0.60000E+01,0.2115E+00,0.17479E+03,0.99900E+03); + AliMaterial(71,"ITS SANDW A$",0.12011E+02,0.60000E+01,0.2115E+00,0.17479E+03,0.99900E+03); AliMedium(71,"ITS SANDW A$",71,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); AliMaterial(72,"ITS SANDW B$",0.12011E+02,0.60000E+01,0.27000E+00,0.18956E+03,0.99900E+03); @@ -4777,34 +4999,44 @@ void AliITSvPPRasymmFMD::CreateMaterials(){ AliMaterial(75,"ELASTO SIL$",0.28086E+02,0.14000E+02,0.23300E+01,0.93600E+01,0.99900E+03); AliMedium(75,"ELASTO SIL$",75,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); - AliMaterial(76,"SPDBUS(AL+KPT+EPOX)$",0.19509E+02,0.96502E+01,0.19060E+01,0.15413E+02,0.99900E+03); + // SPD bus (data from Petra Riedler) + Float_t aSPDbus[5] = {1.00794,12.0107,14.01,15.9994,26.982 }; + Float_t zSPDbus[5] = {1.,6.,7.,8.,13.}; + Float_t wSPDbus[5] = {0.023523,0.318053,0.009776,0.078057,0.570591}; + Float_t dSPDbus = 2.128505; + + // AliMaterial(76,"SPDBUS(AL+KPT+EPOX)$",0.19509E+02,0.96502E+01,0.19060E+01,0.15413E+02,0.99900E+03); + AliMixture(76,"SPDBUS(AL+KPT+EPOX)$",aSPDbus,zSPDbus,dSPDbus,5,wSPDbus); AliMedium(76,"SPDBUS(AL+KPT+EPOX)$",76,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); - AliMaterial(77,"SDD X7R capacitors$",0.1157516E+03,0.477056E+02,0.67200E+01,0.14236E+01,0.99900E+03); + AliMixture(77,"SDD X7R capacitors$",aX7R,zX7R,dX7R,7,wX7R); AliMedium(77,"SDD X7R capacitors$",77,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); - AliMaterial(78,"SDD ruby sph. Al2O3$",0.218101E+02,0.106467E+02,0.39700E+01,0.48539E+01,0.99900E+03); + AliMixture(78,"SDD ruby sph. Al2O3$",aAlOxide,zAlOxide,dAlOxide,2,wAlOxide); AliMedium(78,"SDD ruby sph. Al2O3$",78,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); AliMaterial(79,"SDD SI insensitive$",0.28086E+02,0.14000E+02,0.23300E+01,0.93600E+01,0.99900E+03); AliMedium(79,"SDD SI insensitive$",79,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); - AliMaterial(80,"SDD HV microcable$",0.159379E+02,0.78598E+01,0.16087E+01,0.217906E+02,0.99900E+03); + AliMixture(80,"SDD HV microcable$",aHVm,zHVm,dHVm,5,wHVm); AliMedium(80,"SDD HV microcable$",80,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); - AliMaterial(81,"SDD LV+signal cable$",0.223689E+02,0.108531+02,0.21035E+01,0.13440E+02,0.99900E+03); + AliMixture(81,"SDD LV+signal cable$",aLVm,zLVm,dLVm,5,wLVm); AliMedium(81,"SDD LV+signal cable$",81,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); - AliMaterial(82,"SDD hybrid microcab$",0.218254E+02,0.106001E+02,0.20502E+01,0.137308E+02,0.99900E+03); + AliMixture(82,"SDD hybrid microcab$",aHLVm, zHLVm,dHLVm,5,wHLVm); AliMedium(82,"SDD hybrid microcab$",82,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); - AliMaterial(83,"SDD anode microcab$",0.186438E+02,0.91193E+01,0.17854E+01,0.176451E+02,0.99900E+03); + AliMixture(83,"SDD anode microcab$",aALVm,zALVm,dALVm,5,wALVm); AliMedium(83,"SDD anode microcab$",83,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); - - AliMaterial(84,"SDD/SSD rings$",0.123565E+02,0.64561E+01,0.18097E+01,0.229570E+02,0.99900E+03); + Float_t aDSring[4]={12.0107, 1.00794, 14.0067, 15.9994}; + Float_t zDSring[4]={ 6., 1., 7., 8.}; + Float_t wDSring[4]={ 0.854323888, 0.026408778, 0.023050265, 0.096217069}; + Float_t dDSring = 0.2875; + AliMixture(84,"SDD/SSD rings$",aDSring,zDSring,dDSring,4,wDSring); AliMedium(84,"SDD/SSD rings$",84,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); - AliMaterial(85,"inox/alum$",0.321502E+02,0.153383E+02,0.30705E+01,0.69197E+01,0.99900E+03); + AliMixture(85,"inox/alum$",aInAl,zInAl,dInAl,5,wInAl); AliMedium(85,"inox/alum$",85,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); // special media to take into account services in the SDD and SSD @@ -4821,141 +5053,141 @@ void AliITSvPPRasymmFMD::CreateMaterials(){ //End_Html // AliMaterial(86,"AIRFMDSDD$",0.14610E+02,0.73000E+01,0.12050E-02,0.30423E+05,0.99900E+03); - Float_t A[13],Z[13],W[13],den; + Float_t aA[13],zZ[13],wW[13],den; // From Pierluigi Barberis calculations of 2SPD+1SDD October 2 2002. - Z[0] = 1.0; A[0] = 1.00794; // Hydrogen - Z[1] = 6.0; A[1] = 12.011; // Carbon - Z[2] = 7.0; A[2] = 14.00674; // Nitrogen - Z[3] = 8.0; A[3] = 15.9994; // Oxigen - Z[4] = 14.0; A[4] = 28.0855; // Silicon - Z[5] = 24.0; A[5] = 51.9961; //Cromium - Z[6] = 25.0; A[6] = 54.938049; // Manganese - Z[7] = 26.0; A[7] = 55.845; // Iron - Z[8] = 28.0; A[8] = 58.6934; // Nickle - Z[9] = 29.0; A[9] = 63.546; // Copper - Z[10] = 13.0; A[10] = 26.981539; // Alulminum - Z[11] = 47.0; A[11] = 107.8682; // Silver - Z[12] = 27.0; A[12] = 58.9332; // Cobolt - W[0] = 0.019965; - W[1] = 0.340961; - W[2] = 0.041225; - W[3] = 0.200352; - W[4] = 0.000386; - W[5] = 0.001467; - W[6] = 0.000155; - W[7] = 0.005113; - W[8] = 0.000993; - W[9] = 0.381262; - W[10] = 0.008121; - W[11] = 0.000000; - W[12] = 0.000000; + zZ[0] = 1.0; aA[0] = 1.00794; // Hydrogen + zZ[1] = 6.0; aA[1] = 12.011; // Carbon + zZ[2] = 7.0; aA[2] = 14.00674; // Nitrogen + zZ[3] = 8.0; aA[3] = 15.9994; // Oxigen + zZ[4] = 14.0; aA[4] = 28.0855; // Silicon + zZ[5] = 24.0; aA[5] = 51.9961; //Cromium + zZ[6] = 25.0; aA[6] = 54.938049; // Manganese + zZ[7] = 26.0; aA[7] = 55.845; // Iron + zZ[8] = 28.0; aA[8] = 58.6934; // Nickle + zZ[9] = 29.0; aA[9] = 63.546; // Copper + zZ[10] = 13.0; aA[10] = 26.981539; // Alulminum + zZ[11] = 47.0; aA[11] = 107.8682; // Silver + zZ[12] = 27.0; aA[12] = 58.9332; // Cobolt + wW[0] = 0.019965; + wW[1] = 0.340961; + wW[2] = 0.041225; + wW[3] = 0.200352; + wW[4] = 0.000386; + wW[5] = 0.001467; + wW[6] = 0.000155; + wW[7] = 0.005113; + wW[8] = 0.000993; + wW[9] = 0.381262; + wW[10] = 0.008121; + wW[11] = 0.000000; + wW[12] = 0.000000; if(fByThick){// New values seeITS_MatBudget_4B.xls den = 1.5253276; // g/cm^3 Cell O370 }else{ den = 2.58423412; // g/cm^3 Cell L370 } // end if fByThick //den = 6161.7/(3671.58978);//g/cm^3 Volume does not exclude holes - AliMixture(86,"AIRFMDSDD$",A,Z,den,+11,W); + AliMixture(86,"AIRFMDSDD$",aA,zZ,den,+11,wW); AliMedium(86,"AIRFMDSDD$",86,0,ifield,fieldm,tmaxfdAir,stemaxAir, deemaxAir,epsilAir,stminAir); //AliMaterial(87,"AIRFMDSSD$",0.14610E+02,0.73000E+01,0.12050E-02,0.30423E+05,0.99900E+03); // From Pierluigi Barberis calculations of SSD October 2 2002. - W[0] = 0.019777; - W[1] = 0.325901; - W[2] = 0.031848; - W[3] = 0.147668; - W[4] = 0.030609; - W[5] = 0.013993; - W[6] = 0.001479; - W[7] = 0.048792; - W[8] = 0.009477; - W[9] = 0.350697; - W[10] = 0.014546; - W[11] = 0.005213; - W[12] = 0.000000; + wW[0] = 0.019777; + wW[1] = 0.325901; + wW[2] = 0.031848; + wW[3] = 0.147668; + wW[4] = 0.030609; + wW[5] = 0.013993; + wW[6] = 0.001479; + wW[7] = 0.048792; + wW[8] = 0.009477; + wW[9] = 0.350697; + wW[10] = 0.014546; + wW[11] = 0.005213; + wW[12] = 0.000000; if(fByThick){// New values seeITS_MatBudget_4B.xls den = 1.2464275; // g/cm^3 Cell O403 }else{ den = 1.28134409; // g/cm^3 Cell L403 } // end if fByThick //den = 7666.3/(9753.553259); // volume does not exclude holes - AliMixture(87,"AIRFMDSSD$",A,Z,den,+12,W); + AliMixture(87,"AIRFMDSSD$",aA,zZ,den,+12,wW); AliMedium(87,"AIRFMDSSD$",87,0,ifield,fieldm,tmaxfdAir,stemaxAir, deemaxAir,epsilAir,stminAir); //AliMaterial(88,"ITS SANDW CFMDSDD$",0.12011E+02,0.60000E+01,0.41000E+00,0.90868E+02,0.99900E+03); // From Pierluigi Barberis calculations of 1SDD+Carbon fiber October 2 2002 - W[0] = 0.016302; - W[1] = 0.461870; - W[2] = 0.033662; - W[3] = 0.163595; - W[4] = 0.000315; - W[5] = 0.001197; - W[6] = 0.000127; - W[7] = 0.004175; - W[8] = 0.000811; - W[9] = 0.311315; - W[10] = 0.006631; - W[11] = 0.000000; - W[12] = 0.000000; + wW[0] = 0.016302; + wW[1] = 0.461870; + wW[2] = 0.033662; + wW[3] = 0.163595; + wW[4] = 0.000315; + wW[5] = 0.001197; + wW[6] = 0.000127; + wW[7] = 0.004175; + wW[8] = 0.000811; + wW[9] = 0.311315; + wW[10] = 0.006631; + wW[11] = 0.000000; + wW[12] = 0.000000; if(fByThick){// New values seeITS_MatBudget_4B.xls den = 1.9353276; // g/cm^3 Cell N370 }else{ den = 3.2788626; // g/cm^3 Cell F370 } // end if fByThick //den = 7667.1/(3671.58978); // Volume does not excludeholes - AliMixture(88,"ITS SANDW CFMDSDD$",A,Z,den,+11,W); + AliMixture(88,"ITS SANDW CFMDSDD$",aA,zZ,den,+11,wW); AliMedium(88,"ITS SANDW CFMDSDD$",88,0,ifield,fieldm,tmaxfd,stemax, deemax,epsil,stmin); //AliMaterial(89,"ITS SANDW CFMDSSD$",0.12011E+02,0.60000E+01,0.41000E+00,0.90868E+02,0.99900E+03); // From Pierluigi Barberis calculations of SSD+Carbon fiber October 2 2002. - W[0] = 0.014065; - W[1] = 0.520598; - W[2] = 0.022650; - W[3] = 0.105018; - W[4] = 0.021768; - W[5] = 0.009952; - W[6] = 0.001051; - W[7] = 0.034700; - W[8] = 0.006740; - W[9] = 0.249406; - W[10] = 0.010345; - W[11] = 0.0003707; - W[12] = 0.000000; + wW[0] = 0.014065; + wW[1] = 0.520598; + wW[2] = 0.022650; + wW[3] = 0.105018; + wW[4] = 0.021768; + wW[5] = 0.009952; + wW[6] = 0.001051; + wW[7] = 0.034700; + wW[8] = 0.006740; + wW[9] = 0.249406; + wW[10] = 0.010345; + wW[11] = 0.0003707; + wW[12] = 0.000000; if(fByThick){// New values seeITS_MatBudget_4B.xls den = 1.6564275; // g/cm^3 Cell N304 }else{ den = 1.7028296; // g/cm^3 Cell F304 } // end if fByThick //den = 1166.5/(3671.58978); // Volume does not exclude holes - AliMixture(89,"ITS SANDW CFMDSSD$",A,Z,den,+12,W); + AliMixture(89,"ITS SANDW CFMDSSD$",aA,zZ,den,+12,wW); AliMedium(89,"ITS SANDW CFMDSSD$",89,0,ifield,fieldm,tmaxfd,stemax, deemax,epsil,stmin); //AliMaterial(97,"SPD SERVICES$",0.12011E+02,0.60000E+01,0.41000E+00,0.90868E+02,0.99900E+03); // From Pierluigi Barberis calculations of 1SPD October 2 2002. - W[0] = 0.005970; - W[1] = 0.304704; - W[2] = 0.042510; - W[3] = 0.121715; - W[4] = 0.001118; - W[5] = 0.030948; - W[6] = 0.003270; - W[7] = 0.107910; - W[8] = 0.020960; - W[9] = 0.360895; - W[10] = 0.000000; - W[11] = 0.000000; - W[12] = 0.000000; + wW[0] = 0.005970; + wW[1] = 0.304704; + wW[2] = 0.042510; + wW[3] = 0.121715; + wW[4] = 0.001118; + wW[5] = 0.030948; + wW[6] = 0.003270; + wW[7] = 0.107910; + wW[8] = 0.020960; + wW[9] = 0.360895; + wW[10] = 0.000000; + wW[11] = 0.000000; + wW[12] = 0.000000; if(fByThick){// New values seeITS_MatBudget_4B.xls den = 80.31136576; // g/cm^3 Cell H329 }else{ den = 87.13062; // g/cm^3 Cell G329 } // end if fByThick //den = 1251.3/(0.05*2.0*TMath::Pi()*(7.75*7.75 - 3.7*3.7)); // g/cm^3 - AliMixture(97,"SPD SERVICES$",A,Z,den,+10,W); + AliMixture(97,"SPD SERVICES$",aA,zZ,den,+10,wW); AliMedium(97,"SPD SERVICES$",97,0,ifield,fieldm,tmaxfd,stemax, deemax,epsil,stmin); @@ -4965,21 +5197,28 @@ void AliITSvPPRasymmFMD::CreateMaterials(){ AliMaterial(90,"SPD shield$", 12.011, 6., 1.93/10. , 22.1*10., 999); AliMedium(90,"SPD shield$",90,0,ifield,fieldm,tmaxfdServ,stemaxServ,deemaxServ,epsilServ,stminServ); - AliMaterial(91, "SPD End ladder$", 47.0447, 21.7963, 3.6374, 4.4711, 999); + // SPD End Ladder (data from Petra Riedler) + Float_t aSPDel[5] = {1.00794,12.0107,14.01,15.9994,63.54 }; + Float_t zSPDel[5] = {1.,6.,7.,8.,29.}; + Float_t wSPDel[5] = {0.004092,0.107274,0.011438,0.032476,0.844719}; + Float_t dSPDel = 3.903403; + + // AliMaterial(91, "SPD End ladder$", 47.0447, 21.7963, 3.6374, 4.4711, 999); + AliMixture(91,"SPD End ladder$",aSPDel,zSPDel,dSPDel,5,wSPDel); AliMedium(91,"SPD End ladder$",91,0,ifield,fieldm,tmaxfdServ,stemaxServ,deemaxServ,epsilServ,stminServ); AliMaterial(92, "SPD cone$",28.0855, 14., 2.33, 9.36, 999); AliMedium(92,"SPD cone$",92,0,ifield,fieldm,tmaxfdServ,stemaxServ,deemaxServ,epsilServ,stminServ); - + /* Material with fractional Z not actually used AliMaterial(93, "SDD End ladder$", 69.9298, 29.8246, 0.3824, 36.5103, 999); AliMedium(93,"SDD End ladder$",93,0,ifield,fieldm,tmaxfdServ,stemaxServ,deemaxServ,epsilServ,stminServ); - + */ AliMaterial(94, "SDD cone$",63.546, 29., 1.15, 1.265, 999); AliMedium(94,"SDD cone$",94,0,ifield,fieldm,tmaxfdServ,stemaxServ,deemaxServ,epsilServ,stminServ); - + /* Material with fractional Z not actually used AliMaterial(95, "SSD End ladder$", 32.0988, 15.4021, 0.68, 35.3238, 999); AliMedium(95,"SSD End ladder$",95,0,ifield,fieldm,tmaxfdServ,stemaxServ,deemaxServ,epsilServ,stminServ); - + */ AliMaterial(96, "SSD cone$",63.546, 29., 1.15, 1.265, 999); AliMedium(96,"SSD cone$",96,0,ifield,fieldm,tmaxfdServ,stemaxServ,deemaxServ,epsilServ,stminServ); } @@ -4994,139 +5233,102 @@ void AliITSvPPRasymmFMD::InitAliITSgeom(){ // none. // Return: // none. - - if(strcmp(gMC->GetName(),"TGeant3")) { - Error("InitAliITSgeom", - "Wrong Monte Carlo. InitAliITSgeom uses TGeant3 calls"); - return; - } // end if - cout << "Reading Geometry transformation directly from Geant 3." << endl; - const Int_t nlayers = 6; - const Int_t ndeep = 9; - Int_t itsGeomTreeNames[nlayers][ndeep],lnam[20],lnum[20]; - Int_t nlad[nlayers],ndet[nlayers]; - Double_t t[3],r[10]; - Float_t par[20],att[20]; - Int_t npar,natt,idshape,imat,imed; - AliITSGeant3Geometry *ig = new AliITSGeant3Geometry(); - Int_t mod,lay,lad,det,i,j,k; - Char_t names[nlayers][ndeep][4]; - Int_t itsGeomTreeCopys[nlayers][ndeep]; - if(fMinorVersion == 1){ // Option A - Char_t *namesA[nlayers][ndeep] = { - {"ALIC","ITSV","ITSD","IT12","I12A","I10A","I103","I101","ITS1"}, // lay=1 - {"ALIC","ITSV","ITSD","IT12","I12A","I20A","I1D3","I1D1","ITS2"}, // lay=2 - {"ALIC","ITSV","ITSD","IT34","I004","I302","ITS3"," "," "}, // lay=3 - {"ALIC","ITSV","ITSD","IT34","I005","I402","ITS4"," "," "}, // lay=4 - {"ALIC","ITSV","ITSD","IT56","I565","I562","ITS5"," "," "}, // lay=5 - {"ALIC","ITSV","ITSD","IT56","I569","I566","ITS6"," "," "}};// lay=6 - Int_t itsGeomTreeCopysA[nlayers][ndeep]= {{1,1,1,1,10, 2, 4,1,1},// lay=1 - {1,1,1,1,10, 4, 4,1,1},// lay=2 - {1,1,1,1,14, 6, 1,0,0},// lay=3 - {1,1,1,1,22, 8, 1,0,0},// lay=4 - {1,1,1,1,34,22, 1,0,0},// lay=5 - {1,1,1,1,38,25, 1,0,0}};//lay=6 - for(i=0;iStringToInt(names[i][j]); + const Int_t knlayers = 6; + const Int_t kndeep = 3; + const AliITSDetector idet[knlayers]={kSPD,kSPD,kSDD,kSDD,kSSD,kSSD}; + const TString names[2][knlayers] = { + {"/ALIC_1/ITSV_1/ITSD_1/IT12_1/I12A_%d/I10A_%d/I103_%d/I101_1/ITS1_1", // lay=1 + "/ALIC_1/ITSV_1/ITSD_1/IT12_1/I12A_%d/I20A_%d/I1D3_%d/I1D1_1/ITS2_1", // lay=2 + "/ALIC_1/ITSV_1/ITSD_1/IT34_1/I004_%d/I302_%d/ITS3_%d", // lay=3 + "/ALIC_1/ITSV_1/ITSD_1/IT34_1/I005_%d/I402_%d/ITS4_%d", // lay=4 + "/ALIC_1/ITSV_1/ITSD_1/IT56_1/I565_%d/I562_%d/ITS5_%d", // lay=5 + "/ALIC_1/ITSV_1/ITSD_1/IT56_1/I569_%d/I566_%d/ITS6_%d"},// lay=6 + {"/ALIC_1/ITSV_1/ITSD_1/IT12_1/I12B_%d/I10B_%d/I107_%d/I101_1/ITS1_1", // lay=1 + "/ALIC_1/ITSV_1/ITSD_1/IT12_1/I12B_%d/I20B_%d/I1D7_%d/I1D1_1/ITS2_1", // lay=2 + "/ALIC_1/ITSV_1/ITSD_1/IT34_1/I004_%d/I302_%d/ITS3_%d", // lay=3 + "/ALIC_1/ITSV_1/ITSD_1/IT34_1/I005_%d/I402_%d/ITS4_%d", // lay=4 + "/ALIC_1/ITSV_1/ITSD_1/IT56_1/I565_%d/I562_%d/ITS5_%d", // lay=5 + "/ALIC_1/ITSV_1/ITSD_1/IT56_1/I569_%d/I566_%d/ITS6_%d"} + }; + const Int_t itsGeomTreeCopys[knlayers][kndeep]= {{10, 2, 4},// lay=1 + {10, 4, 4},// lay=2 + {14, 6, 1},// lay=3 + {22, 8, 1},// lay=4 + {34,22, 1},// lay=5 + {38,25, 1}};//lay=6 + Int_t nlad[knlayers],ndet[knlayers]; + Int_t mod,lay,lad=0,det=0,i,j,k,cp0,cp1,cp2; + TString path,shapeName; + TGeoHMatrix materix; + Double_t trans[3]={3*0.0},rot[10]={9*0.0,1.0}; + TArrayD shapePar; + TArrayF shapeParF; + + AliDebug(1,"Reading Geometry transformation directly from Modler."); mod = 0; - for(i=0;iGetGeometry(ndeep,lnam,lnum,t,r,idshape,npar,natt, - par,att,imat,imed); - fITSgeom->CreatMatrix(mod,lay,lad,det,kSPD,t,r); - if(!(fITSgeom->IsShapeDefined((Int_t)kSPD))) - fITSgeom->ReSetShape(kSPD, - new AliITSgeomSPD425Short(npar,par)); - } // end for det - } // end for k - } // end for j - break; - case 3: case 4: case 5: case 6: // layers 3-6 - lnum[6] = 1; - for(lad=1;lad<=itsGeomTreeCopys[lay-1][4];lad++){ - lnum[4] = lad; - for(det=1;det<=itsGeomTreeCopys[lay-1][5];det++){ - lnum[5] = det; - mod++; - ig->GetGeometry(7,lnam,lnum,t,r,idshape,npar,natt, - par,att,imat,imed); - switch (lay){ - case 3: case 4: - fITSgeom->CreatMatrix(mod,lay,lad,det,kSDD,t,r); - if(!(fITSgeom->IsShapeDefined(kSDD))) - fITSgeom->ReSetShape(kSDD, - new AliITSgeomSDD256(npar,par)); - break; - case 5: - fITSgeom->CreatMatrix(mod,lay,lad,det,kSSD,t,r); - if(!(fITSgeom->IsShapeDefined(kSSD))) - fITSgeom->ReSetShape(kSSD, - new AliITSgeomSSD275and75(npar,par)); - break; - case 6: - fITSgeom->CreatMatrix(mod,lay,lad,det,kSSD,t,r); - if(!(fITSgeom->IsShapeDefined(kSSD))) - fITSgeom->ReSetShape(kSSD, - new AliITSgeomSSD75and275(npar,par)); - break; - } // end switch - } // end for det - } // end for lad - break; - } // end switch + ndet[0]= 4;ndet[1]= 4;ndet[2]= 6;ndet[3]= 8;ndet[4]=22;ndet[5]=25; + AliITSgeom* geom = new AliITSgeom(0,6,nlad,ndet,mod); + SetITSgeom(geom); + mod = 0; + for(lay=1;lay<=knlayers;lay++){ + for(cp0=1;cp0<=itsGeomTreeCopys[lay-1][0];cp0++){ + for(cp1=1;cp1<=itsGeomTreeCopys[lay-1][1];cp1++){ + for(cp2=1;cp2<=itsGeomTreeCopys[lay-1][2];cp2++){ + path.Form(names[fMinorVersion-1][lay-1].Data(), + cp0,cp1,cp2); + switch (lay){ + case 1:{ + det = cp2; + lad = cp1+2*(cp0-1); + }break; + case 2:{ + det = cp2; + lad = cp1+4*(cp0-1); + } break; + case 3: case 4: case 5: case 6:{ + det = cp1; + lad = cp0; + } break; + } // end switch + //AliInfo(Form("path=%s lay=%d lad=%d det=%d", + // path.Data(),lay,lad,det)); + gMC->GetTransformation(path.Data(),materix); + gMC->GetShape(path.Data(),shapeName,shapePar); + shapeParF.Set(shapePar.GetSize()); + for(i=0;iCreatMatrix(mod,lay,lad,det,idet[lay-1],trans,rot); + geom->SetTrans(mod,materix.GetTranslation()); + geom->SetRotMatrix(mod,materix.GetRotationMatrix()); + switch (lay){ + case 1: case 2:{ + geom->ReSetShape(kSPD,new AliITSgeomSPD425Short( + shapeParF.GetSize(),shapeParF.GetArray())); + }break; + case 3: case 4:{ + geom->ReSetShape(kSDD,new AliITSgeomSDD256( + shapeParF.GetSize(),shapeParF.GetArray())); + }break; + case 5: case 6:{ + geom->ReSetShape(kSSD,new AliITSgeomSSD75and275( + shapeParF.GetSize(),shapeParF.GetArray())); + }break; + default:{ + }break; + } // end switch + mod++; + } /// end for cp2 + } // end for cp1 + } // end for cp0 } // end for lay return; } @@ -5139,24 +5341,19 @@ void AliITSvPPRasymmFMD::Init(){ // none. // Return: // none. - Int_t i; - cout << endl; - for(i=0;i<26;i++) cout << "*"; - cout << " ITSvPPRasymm" << fMinorVersion << "_Init "; - for(i=0;i<25;i++) cout << "*";cout << endl; + AliInfo(Form("Minor version %d",fMinorVersion)); // if(fRead[0]=='\0') strncpy(fRead,fEuclidGeomDet,60); if(fWrite[0]=='\0') strncpy(fWrite,fEuclidGeomDet,60); - if(fITSgeom!=0) delete fITSgeom; - fITSgeom = new AliITSgeom(); - if(fGeomDetIn) fITSgeom->ReadNewFile(fRead); - if(!fGeomDetIn) this->InitAliITSgeom(); - if(fGeomDetOut) fITSgeom->WriteNewFile(fWrite); + if(GetITSgeom()!=0) SetITSgeom(0x0); + AliITSgeom* geom = new AliITSgeom(); + SetITSgeom(geom); + if(fGeomDetIn) GetITSgeom()->ReadNewFile(fRead); + else this->InitAliITSgeom(); + if(fGeomDetOut) GetITSgeom()->WriteNewFile(fWrite); AliITS::Init(); // - for(i=0;i<72;i++) cout << "*"; - cout << endl; fIDMother = gMC->VolId("ITSV"); // ITS Mother Volume ID. } //______________________________________________________________________ @@ -5168,23 +5365,29 @@ void AliITSvPPRasymmFMD::SetDefaults(){ // none. // Return: // none. - const Float_t kconv = 1.0e+04; // convert cm to microns - cout << "AliITSvPPRasymmFMD::SetDefaults" << endl; + const Float_t kconv = 1.0e+04; // convert cm to microns + AliInfo("Called"); - AliITSDetType *iDetType; + if(!fDetTypeSim) fDetTypeSim = new AliITSDetTypeSim(); + fDetTypeSim->SetITSgeom(GetITSgeom()); + AliITSgeomSPD *s0; AliITSgeomSDD *s1; AliITSgeomSSD *s2; Int_t i; Float_t bx[256],bz[280]; - + + + fDetTypeSim->SetDefaults(); + //SPD - iDetType=DetType(kSPD); - s0 = (AliITSgeomSPD*) fITSgeom->GetShape(kSPD);// Get shape info. Do it this way for now. - AliITSresponse *resp0=new AliITSresponseSPD(); - SetResponseModel(kSPD,resp0); - AliITSsegmentationSPD *seg0=new AliITSsegmentationSPD(fITSgeom); + s0 = (AliITSgeomSPD*) GetITSgeom()->GetShape(kSPD);// Get shape info. Do it this way for now. + //AliITSCalibrationSPD* resp0=new AliITSCalibrationSPD(); + + //AliITSsegmentationSPD *seg0=new AliITSsegmentationSPD(GetITSgeom()); + + AliITSsegmentationSPD* seg0 = (AliITSsegmentationSPD*)fDetTypeSim->GetSegmentationModel(0); seg0->SetDetSize(s0->GetDx()*2.*kconv, // base this on AliITSgeomSPD s0->GetDz()*2.*kconv, // for now. s0->GetDy()*2.*kconv); // x,z,y full width in microns. @@ -5200,38 +5403,37 @@ void AliITSvPPRasymmFMD::SetDefaults(){ seg0->SetBinSize(bx,bz); // Based on AliITSgeomSPD for now. SetSegmentationModel(kSPD,seg0); // set digit and raw cluster classes to be used - const char *kData0=(iDetType->GetResponseModel())->DataType(); - if (strstr(kData0,"real")) iDetType->ClassNames("AliITSdigit", - "AliITSRawClusterSPD"); - else iDetType->ClassNames("AliITSdigitSPD","AliITSRawClusterSPD"); -// SetSimulationModel(kSPD,new AliITSsimulationSPD(seg0,resp0)); -// iDetType->ReconstructionModel(new AliITSClusterFinderSPD()); - + const char *kData0=(fDetTypeSim->GetCalibrationModel(GetITSgeom()->GetStartSPD()))->DataType(); + if (strstr(kData0,"real")) fDetTypeSim->SetDigitClassName(kSPD,"AliITSdigit"); + else fDetTypeSim->SetDigitClassName(kSPD,"AliITSdigitSPD"); // SDD - iDetType=DetType(kSDD); - s1 = (AliITSgeomSDD*) fITSgeom->GetShape(kSDD);// Get shape info. Do it this way for now. - AliITSresponseSDD *resp1=new AliITSresponseSDD("simulated"); - SetResponseModel(kSDD,resp1); - AliITSsegmentationSDD *seg1=new AliITSsegmentationSDD(fITSgeom,resp1); + s1 = (AliITSgeomSDD*) GetITSgeom()->GetShape(kSDD);// Get shape info. Do it this way for now. + + //AliITSCalibrationSDD* resp1=new AliITSCalibrationSDD("simulated"); + + //AliITSsegmentationSDD *seg1=new AliITSsegmentationSDD(GetITSgeom(),resp1); + + AliITSsegmentationSDD* seg1 = (AliITSsegmentationSDD*)fDetTypeSim->GetSegmentationModel(1); seg1->SetDetSize(s1->GetDx()*kconv, // base this on AliITSgeomSDD s1->GetDz()*2.*kconv, // for now. s1->GetDy()*2.*kconv); // x,z,y full width in microns. seg1->SetNPads(256,256);// Use AliITSgeomSDD for now SetSegmentationModel(kSDD,seg1); - const char *kData1=(iDetType->GetResponseModel())->DataType(); - const char *kopt=iDetType->GetResponseModel()->ZeroSuppOption(); + const char *kData1=(fDetTypeSim->GetCalibrationModel(GetITSgeom()->GetStartSDD()))->DataType(); + AliITSCalibrationSDD* rsp = (AliITSCalibrationSDD*)fDetTypeSim->GetCalibrationModel(GetITSgeom()->GetStartSDD()); + const char *kopt=rsp->GetZeroSuppOption(); if((!strstr(kopt,"2D")) && (!strstr(kopt,"1D")) || strstr(kData1,"real") ){ - iDetType->ClassNames("AliITSdigit","AliITSRawClusterSDD"); - } else iDetType->ClassNames("AliITSdigitSDD","AliITSRawClusterSDD"); -// SetSimulationModel(kSDD,new AliITSsimulationSDD(seg1,resp1)); -// iDetType->ReconstructionModel(new AliITSClusterFinderSDD()); - + fDetTypeSim->SetDigitClassName(kSDD,"AliITSdigit"); + } else fDetTypeSim->SetDigitClassName(kSDD,"AliITSdigitSDD"); // SSD Layer 5 - iDetType=DetType(kSSD); - s2 = (AliITSgeomSSD*) fITSgeom->GetShape(kSSD);// Get shape info. Do it this way for now. - AliITSresponse *resp2=new AliITSresponseSSD("simulated"); - SetResponseModel(kSSD,resp2); - AliITSsegmentationSSD *seg2=new AliITSsegmentationSSD(fITSgeom); + + s2 = (AliITSgeomSSD*) GetITSgeom()->GetShape(kSSD);// Get shape info. Do it this way for now. + + + //SetCalibrationModel(GetITSgeom()->GetStartSSD(),new AliITSCalibrationSSD("simulated")); + + //AliITSsegmentationSSD *seg2=new AliITSsegmentationSSD(GetITSgeom()); + AliITSsegmentationSSD* seg2 = (AliITSsegmentationSSD*)fDetTypeSim->GetSegmentationModel(2); seg2->SetDetSize(s2->GetDx()*2.*kconv, // base this on AliITSgeomSSD s2->GetDz()*2.*kconv, // for now. s2->GetDy()*2.*kconv); // x,z,y full width in microns. @@ -5241,21 +5443,19 @@ void AliITSvPPRasymmFMD::SetDefaults(){ seg2->SetAnglesLay5(0.0075,0.0275); // strip angels rad P and N side. seg2->SetAnglesLay6(0.0275,0.0075); // strip angels rad P and N side. SetSegmentationModel(kSSD,seg2); - const char *kData2=(iDetType->GetResponseModel())->DataType(); - if(strstr(kData2,"real") ) iDetType->ClassNames("AliITSdigit", - "AliITSRawClusterSSD"); - else iDetType->ClassNames("AliITSdigitSSD","AliITSRawClusterSSD"); -// SetSimulationModel(kSSD,new AliITSsimulationSSD(seg2,resp2)); -// iDetType->ReconstructionModel(new AliITSClusterFinderSSD()); - - if(kNTYPES>3){ + const char *kData2=(fDetTypeSim->GetCalibrationModel(GetITSgeom()->GetStartSSD()))->DataType(); + if(strstr(kData2,"real") ) fDetTypeSim->SetDigitClassName(kSSD,"AliITSdigit"); + else fDetTypeSim->SetDigitClassName(kSSD,"AliITSdigitSSD"); + if(fgkNTYPES>3){ Warning("SetDefaults", "Only the four basic detector types are initialised!"); }// end if + + return; } //______________________________________________________________________ -void AliITSvPPRasymmFMD::DrawModule(){ +void AliITSvPPRasymmFMD::DrawModule() const{ // Draw a shaded view of the FMD version 10. // Inputs: // none. @@ -5321,20 +5521,30 @@ void AliITSvPPRasymmFMD::StepManager(){ // none. // Return: // none. + Int_t copy, id; TLorentzVector position, momentum; static TLorentzVector position0; static Int_t stat0=0; - if((id=gMC->CurrentVolID(copy) == fIDMother)&& - (gMC->IsTrackEntering()||gMC->IsTrackExiting())){ + + if(!(this->IsActive())){ + return; + } // end if !Active volume. + + if(!(gMC->TrackCharge())) return; + + id=gMC->CurrentVolID(copy); + + Bool_t sensvol = kFALSE; + for(Int_t kk=0;kk<6;kk++)if(id == fIdSens[kk])sensvol=kTRUE; + if(sensvol && (gMC->IsTrackExiting())){ copy = fTrackReferences->GetEntriesFast(); TClonesArray &lTR = *fTrackReferences; // Fill TrackReference structure with this new TrackReference. - new(lTR[copy]) AliTrackReference(gAlice->GetCurrentTrackNumber()); + new(lTR[copy]) AliTrackReference(gAlice->GetMCApp()->GetCurrentTrackNumber()); } // if Outer ITS mother Volume - if(!(this->IsActive())){ - return; - } // end if !Active volume. + + Int_t copy1,copy2; Int_t vol[5]; TClonesArray &lhits = *fHits; @@ -5419,10 +5629,11 @@ void AliITSvPPRasymmFMD::StepManager(){ return; } // end if IsEntering // Fill hit structure with this new hit. - new(lhits[fNhits++]) AliITShit(fIshunt,gAlice->GetCurrentTrackNumber(),vol, + + new(lhits[fNhits++]) AliITShit(fIshunt,gAlice->GetMCApp()->GetCurrentTrackNumber(),vol, gMC->Edep(),gMC->TrackTime(),position, position0,momentum); - // + position0 = position; stat0 = vol[3];