X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TRD%2FAliTRD.cxx;h=727e7085aa80cd4a158d174f1ec51e6fa656ccdb;hb=60b29186fa71d961653a77658ea12f1de7828b85;hp=3fd1b38f6b9dc816adbefd9e4a0fda92743047c7;hpb=89ba6aa1d8cbb3b639e338552cf236c0d0d6ac67;p=u%2Fmrichter%2FAliRoot.git diff --git a/TRD/AliTRD.cxx b/TRD/AliTRD.cxx index 3fd1b38f6b9..727e7085aa8 100644 --- a/TRD/AliTRD.cxx +++ b/TRD/AliTRD.cxx @@ -25,10 +25,12 @@ #include #include +#include #include "AliMC.h" #include "AliMagF.h" #include "AliRun.h" +#include "AliLoader.h" #include "AliTRD.h" #include "AliTRDdigitizer.h" @@ -36,8 +38,7 @@ #include "AliTRDgeometry.h" #include "AliTRDhit.h" #include "AliTRDrawData.h" -#include "AliTRDSimParam.h" -#include "TTreeStream.h" +#include "AliTRDCommonParam.h" ClassImp(AliTRD) @@ -48,7 +49,7 @@ AliTRD::AliTRD() ,fGasDensity(0) ,fFoilDensity(0) ,fGasNobleFraction(0) - ,fDebugStream(0x0) + ,fPrimaryIonisation(0) { // // Default constructor @@ -63,7 +64,7 @@ AliTRD::AliTRD(const char *name, const char *title) ,fGasDensity(0) ,fFoilDensity(0) ,fGasNobleFraction(0) - ,fDebugStream(0x0) + ,fPrimaryIonisation(0) { // // Standard constructor for the TRD @@ -89,6 +90,7 @@ AliTRD::AliTRD(const char *name, const char *title) // Allocate the hit array fHits = new TClonesArray("AliTRDhit",405); gAlice->GetMCApp()->AddHitList(fHits); + } //_____________________________________________________________________________ @@ -97,7 +99,7 @@ AliTRD::~AliTRD() // // TRD destructor // - delete fDebugStream; + if (fGeometry) { delete fGeometry; fGeometry = 0; @@ -122,12 +124,7 @@ void AliTRD::Hits2Digits() // Initialization digitizer.InitDetector(); - - TDirectory *savedir = gDirectory; - fDebugStream = new TTreeSRedirector("TRD.SimDebug.root"); - savedir->cd(); - digitizer.SetDebugStream(fDebugStream); - + if (!fLoader->TreeH()) { fLoader->LoadHits("read"); } @@ -161,12 +158,7 @@ void AliTRD::Hits2SDigits() // Initialization digitizer.InitDetector(); - - TDirectory *savedir = gDirectory; - fDebugStream = new TTreeSRedirector("TRD.SimDebug.root"); - savedir->cd(); - digitizer.SetDebugStream(fDebugStream); - + if (!fLoader->TreeH()) { fLoader->LoadHits("read"); } @@ -187,13 +179,13 @@ void AliTRD::Hits2SDigits() } //_____________________________________________________________________________ -AliDigitizer *AliTRD::CreateDigitizer(AliRunDigitizer *manager) const +AliDigitizer *AliTRD::CreateDigitizer(AliDigitizationInput* digInput) const { // // Creates a new digitizer object // - return new AliTRDdigitizer(manager); + return new AliTRDdigitizer(digInput); } @@ -325,200 +317,223 @@ void AliTRD::CreateMaterials() // Create the materials for the TRD // - Int_t isxfld = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Integ(); - Float_t sxmgmx = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Max(); - - // For polyethilene (CH2) - Float_t ape[2] = { 12.011 , 1.0079 }; - Float_t zpe[2] = { 6.0 , 1.0 }; - Float_t wpe[2] = { 1.0 , 2.0 }; - Float_t dpe = 0.95; - - // For CO2 - Float_t aco[2] = { 12.011 , 15.9994 }; - Float_t zco[2] = { 6.0 , 8.0 }; - Float_t wco[2] = { 1.0 , 2.0 }; - Float_t dco = 0.00186; // at 20C - - // For water - Float_t awa[2] = { 1.0079, 15.9994 }; - Float_t zwa[2] = { 1.0 , 8.0 }; - Float_t wwa[2] = { 2.0 , 1.0 }; - Float_t dwa = 1.0; - - // For plexiglas (C5H8O2) - Float_t apg[3] = { 12.011 , 1.0079, 15.9994 }; - Float_t zpg[3] = { 6.0 , 1.0 , 8.0 }; - Float_t wpg[3] = { 5.0 , 8.0 , 2.0 }; - Float_t dpg = 1.18; + Int_t isxfld = ((AliMagF *) TGeoGlobalMagField::Instance()->GetField())->Integ(); + Float_t sxmgmx = ((AliMagF *) TGeoGlobalMagField::Instance()->GetField())->Max(); - // For epoxy (C18H19O3) - Float_t aEpoxy[3] = { 15.9994, 1.0079, 12.011 }; - Float_t zEpoxy[3] = { 8.0 , 1.0 , 6.0 }; - Float_t wEpoxy[3] = { 3.0 , 19.0 , 18.0 }; - Float_t dEpoxy = 1.8 ; - - // For Araldite, low density epoxy (C18H19O3) - Float_t aAral[3] = { 15.9994, 1.0079, 12.011 }; - Float_t zAral[3] = { 8.0 , 1.0 , 6.0 }; - Float_t wAral[3] = { 3.0 , 19.0 , 18.0 }; - Float_t dAral = 1.05; + ////////////////////////////////////////////////////////////////////////// + // Define Materials + ////////////////////////////////////////////////////////////////////////// - // For air + // Aluminum + AliMaterial( 1,"Al", 26.98, 13.0, 2.7, 8.9, 37.2); + // Copper + AliMaterial( 2,"Cu", 63.54, 29.0, 8.96, 1.43, 14.8); + // Carbon + AliMaterial( 3,"C" , 12.01, 6.0, 2.265, 18.8, 74.4); + // Carbon for fiber mats + AliMaterial( 4,"C2", 12.01, 6.0, 1.75, 18.8, 74.4); + // Zinc + AliMaterial( 5,"Sn", 118.71, 50.0, 7.31, 1.21, 14.8); + // Silicon + AliMaterial( 6,"Si", 28.09, 14.0, 2.33, 9.36, 37.2); + // Iron + AliMaterial( 7,"Fe", 55.85, 26.0, 7.87, 1.76, 14.8); + + // Air Float_t aAir[4] = { 12.011 , 14.0 , 15.9994 , 36.0 }; Float_t zAir[4] = { 6.0 , 7.0 , 8.0 , 18.0 }; Float_t wAir[4] = { 0.000124, 0.755267, 0.231781, 0.012827 }; Float_t dAir = 1.20479e-03; - - // For G10 - Float_t aG10[4] = { 1.0079 , 12.011 , 15.9994 , 28.086 }; - Float_t zG10[4] = { 1.0 , 6.0 , 8.0 , 14.0 }; - Float_t wG10[4] = { 0.15201 , 0.10641 , 0.49444 , 0.24714 }; - Float_t dG10 = 1.7; - - // For Xe/CO2-gas-mixture + AliMixture(51,"Air", aAir, zAir, dAir, 4, wAir ); + // Polyethilene (CH2) + Float_t ape[2] = { 12.011 , 1.0079 }; + Float_t zpe[2] = { 6.0 , 1.0 }; + Float_t wpe[2] = { 1.0 , 2.0 }; + Float_t dpe = 0.95; + AliMixture(52,"Polyethilene", ape, zpe, dpe, -2, wpe ); + // Gas mixtures + // Xe/CO2-gas-mixture (85% / 15%) Float_t aXeCO2[3] = { 131.29 , 12.0107 , 15.9994 }; Float_t zXeCO2[3] = { 54.0 , 6.0 , 8.0 }; Float_t wXeCO2[3] = { 8.5 , 1.5 , 3.0 }; - // Xe-content of the Xe/CO2-mixture (85% / 15%) Float_t fxc = 0.85; Float_t dxe = 0.00549; // at 20C + Float_t dco = 0.00186; // at 20C Float_t dgmXe = fxc * dxe + (1.0 - fxc) * dco; - - // For Ar/CO2-gas-mixture + // Ar/CO2-gas-mixture Float_t aArCO2[3] = { 39.948 , 12.0107 , 15.9994 }; Float_t zArCO2[3] = { 18.0 , 6.0 , 8.0 }; Float_t wArCO2[3] = { 8.2 , 1.8 , 3.6 }; - // Ar-content of the Ar/CO2-mixture (82% / 18%) Float_t fac = 0.82; Float_t dar = 0.00166; // at 20C Float_t dgmAr = fac * dar + (1.0 - fac) * dco; - - // General tracking parameter - Float_t tmaxfd = -10.0; - Float_t stemax = -1.0e10; - Float_t deemax = -0.1; - Float_t epsil = 1.0e-4; - Float_t stmin = -0.001; - - ////////////////////////////////////////////////////////////////////////// - // Define Materials - ////////////////////////////////////////////////////////////////////////// - - AliMaterial( 1, "Al" , 26.98, 13.0, 2.7 , 8.9 , 37.2); - AliMaterial( 4, "Xe" , 131.29, 54.0, dxe , 1546.16, 0.0); - AliMaterial( 5, "Cu" , 63.54, 29.0, 8.96 , 1.43, 14.8); - AliMaterial( 6, "C" , 12.01, 6.0, 2.265 , 18.8 , 74.4); - AliMaterial(15, "Sn" , 118.71, 50.0, 7.31 , 1.21, 14.8); - AliMaterial(16, "Si" , 28.09, 14.0, 2.33 , 9.36, 37.2); - AliMaterial(18, "Fe" , 55.85, 26.0, 7.87 , 1.76, 14.8); - - // Mixtures - AliMixture(2, "Air" , aAir, zAir, dAir, 4, wAir ); - AliMixture(3, "Polyethilene", ape, zpe, dpe, -2, wpe ); - AliMixture(8, "CO2", aco, zco, dco, -2, wco ); - if (AliTRDSimParam::Instance()->IsXenon()) { - AliMixture(10,"XeCO2", aXeCO2, zXeCO2, dgmXe, -3, wXeCO2); + if (AliTRDCommonParam::Instance()->IsXenon()) { + AliMixture(53,"XeCO2", aXeCO2, zXeCO2, dgmXe, -3, wXeCO2); } - else if (AliTRDSimParam::Instance()->IsArgon()) { + else if (AliTRDCommonParam::Instance()->IsArgon()) { AliInfo("Gas mixture: Ar C02 (80/20)"); - AliMixture(10,"ArCO2", aArCO2, zArCO2, dgmAr, -3, wArCO2); + AliMixture(53,"ArCO2", aArCO2, zArCO2, dgmAr, -3, wArCO2); } else { AliFatal("Wrong gas mixture"); exit(1); } - AliMixture(12,"G10", aG10, zG10, dG10, 4, wG10 ); - AliMixture(13,"Water", awa, zwa, dwa, -2, wwa ); - AliMixture(14,"Plexiglas", apg, zpg, dpg, -3, wpg ); - AliMixture(17,"Epoxy", aEpoxy, zEpoxy, dEpoxy, -3, wEpoxy); - AliMixture(19,"Araldite", aAral, zAral, dAral, -3, wAral ); + // G10 + Float_t aG10[4] = { 1.0079, 12.011 , 15.9994, 28.086 }; + Float_t zG10[4] = { 1.0 , 6.0 , 8.0 , 14.0 }; + Float_t wG10[4] = { 0.023 , 0.194 , 0.443 , 0.340 }; + Float_t dG10 = 2.0; + AliMixture(54,"G10", aG10, zG10, dG10, 4,wG10 ); + // Water + Float_t awa[2] = { 1.0079, 15.9994 }; + Float_t zwa[2] = { 1.0 , 8.0 }; + Float_t wwa[2] = { 2.0 , 1.0 }; + Float_t dwa = 1.0; + AliMixture(55,"Water", awa, zwa, dwa, -2,wwa ); + // Rohacell (C5H8O2), X0 = 535.005cm + Float_t arh[3] = { 12.011 , 1.0079, 15.9994 }; + Float_t zrh[3] = { 6.0 , 1.0 , 8.0 }; + Float_t wrh[3] = { 5.0 , 8.0 , 2.0 }; + Float_t drh = 0.075; + AliMixture(56,"Rohacell", arh, zrh, drh, -3,wrh ); + // Epoxy (C18H19O3) + Float_t aEpoxy[3] = { 15.9994, 1.0079, 12.011 }; + Float_t zEpoxy[3] = { 8.0 , 1.0 , 6.0 }; + Float_t wEpoxy[3] = { 3.0 , 19.0 , 18.0 }; + Float_t dEpoxy = 1.8 ; + AliMixture(57,"Epoxy", aEpoxy,zEpoxy,dEpoxy,-3,wEpoxy); + // Araldite, low density epoxy (C18H19O3) + Float_t aAral[3] = { 15.9994, 1.0079, 12.011 }; + Float_t zAral[3] = { 8.0 , 1.0 , 6.0 }; + Float_t wAral[3] = { 3.0 , 19.0 , 18.0 }; + Float_t dAral = 1.12; // Hardener: 1.15, epoxy: 1.1, mixture: 1/2 + AliMixture(58,"Araldite", aAral, zAral, dAral, -3,wAral ); + // Mylar + Float_t aMy[3] = { 12.011 , 1.0 , 15.9994 }; + Float_t zMy[3] = { 6.0 , 1.0 , 8.0 }; + Float_t wMy[3] = { 5.0 , 4.0 , 2.0 }; + Float_t dMy = 1.39; + AliMixture(59,"Mylar", aMy, zMy, dMy, -3,wMy ); + // Polypropylene (C3H6) for radiator fibers + Float_t app[2] = { 12.011 , 1.0079 }; + Float_t zpp[2] = { 6.0 , 1.0 }; + Float_t wpp[2] = { 3.0 , 6.0 }; + Float_t dpp = 0.068; + AliMixture(60,"Polypropylene",app, zpp, dpp, -2,wpp ); + // Aramide for honeycomb + Float_t aAra[4] = { 1.0079, 12.011 , 15.9994, 14.0067 }; + Float_t zAra[4] = { 1.0 , 6.0 , 8.0 , 7.0 }; + Float_t wAra[4] = { 3.0 , 1.0 , 1.0 , 1.0 }; + Float_t dAra = 0.032; + AliMixture(61,"Aramide", aAra, zAra, dAra, -4,wAra ); + // GFK for Wacosit (Epoxy + Si) + Float_t aGFK[4] = { 1.0079, 12.011 , 15.9994, 28.086 }; + Float_t zGFK[4] = { 1.0 , 6.0 , 8.0 , 14.0 }; + Float_t wGFK[4] = { 0.0445, 0.5031, 0.1118, 0.340 }; + Float_t dGFK = 2.0; + AliMixture(62,"GFK", aGFK, zGFK, dGFK, 4,wGFK ); ////////////////////////////////////////////////////////////////////////// // Tracking Media Parameters ////////////////////////////////////////////////////////////////////////// + // General tracking parameter + Float_t tmaxfd = -10.0; + Float_t stemax = -1.0e10; + Float_t deemax = -0.1; + Float_t epsil = 1.0e-4; + Float_t stmin = -0.001; + // Al Frame AliMedium( 1,"Al Frame" , 1,0,isxfld,sxmgmx ,tmaxfd,stemax,deemax,epsil,stmin); // Air - AliMedium( 2,"Air" , 2,0,isxfld,sxmgmx + AliMedium( 2,"Air" ,51,0,isxfld,sxmgmx ,tmaxfd,stemax,deemax,epsil,stmin); // Wires - AliMedium( 3,"Wires" , 5,0,isxfld,sxmgmx + AliMedium( 3,"Wires" , 2,0,isxfld,sxmgmx ,tmaxfd,stemax,deemax,epsil,stmin); // All other ROB materials (caps, etc.) - AliMedium( 4,"ROB Other" , 5,0,isxfld,sxmgmx + AliMedium( 4,"ROB Other" , 2,0,isxfld,sxmgmx ,tmaxfd,stemax,deemax,epsil,stmin); // Cu pads - AliMedium( 5,"Padplane" , 5,1,isxfld,sxmgmx + AliMedium( 5,"Padplane" , 2,1,isxfld,sxmgmx ,tmaxfd,stemax,deemax,epsil,stmin); // Fee + cables - AliMedium( 6,"Readout" , 5,0,isxfld,sxmgmx - ,tmaxfd,stemax,deemax,epsil,stmin); - // C frame - AliMedium( 7,"C Frame" , 6,0,isxfld,sxmgmx + AliMedium( 6,"Readout" , 2,0,isxfld,sxmgmx ,tmaxfd,stemax,deemax,epsil,stmin); + // C frame (Wacosit) + AliMedium( 7,"Wacosit" ,62,0,isxfld,sxmgmx + ,tmaxfd,stemax,deemax,epsil,stmin); // INOX of cooling bus bars - AliMedium( 8,"Cooling bus",18,0,isxfld,sxmgmx + AliMedium( 8,"Cooling bus", 7,0,isxfld,sxmgmx ,tmaxfd,stemax,deemax,epsil,stmin); // Gas-mixture (Xe/CO2) - AliMedium( 9,"Gas-mix" ,10,1,isxfld,sxmgmx + AliMedium( 9,"Gas-mix" ,53,1,isxfld,sxmgmx ,tmaxfd,stemax,deemax,epsil,stmin); - // Nomex-honeycomb - AliMedium(10,"Nomex" ,12,0,isxfld,sxmgmx + // Honeycomb + AliMedium(10,"Honeycomb" ,61,0,isxfld,sxmgmx ,tmaxfd,stemax,deemax,epsil,stmin); // Araldite glue - AliMedium(11,"Glue" ,19,0,isxfld,sxmgmx + AliMedium(11,"Glue" ,58,0,isxfld,sxmgmx ,tmaxfd,stemax,deemax,epsil,stmin); // G10-plates - AliMedium(13,"G10-plates" ,12,0,isxfld,sxmgmx + AliMedium(13,"G10-plates" ,54,0,isxfld,sxmgmx ,tmaxfd,stemax,deemax,epsil,stmin); // Cooling water - AliMedium(14,"Water" ,13,0,isxfld,sxmgmx + AliMedium(14,"Water" ,55,0,isxfld,sxmgmx ,tmaxfd,stemax,deemax,epsil,stmin); - // Rohacell (plexiglas) for the radiator - AliMedium(15,"Rohacell" ,14,0,isxfld,sxmgmx + // Rohacell for the radiator + AliMedium(15,"Rohacell" ,56,0,isxfld,sxmgmx ,tmaxfd,stemax,deemax,epsil,stmin); // Al layer in MCMs AliMedium(16,"MCM-Al" , 1,0,isxfld,sxmgmx ,tmaxfd,stemax,deemax,epsil,stmin); // Sn layer in MCMs - AliMedium(17,"MCM-Sn" ,15,0,isxfld,sxmgmx + AliMedium(17,"MCM-Sn" , 5,0,isxfld,sxmgmx ,tmaxfd,stemax,deemax,epsil,stmin); // Cu layer in MCMs - AliMedium(18,"MCM-Cu" , 5,0,isxfld,sxmgmx + AliMedium(18,"MCM-Cu" , 2,0,isxfld,sxmgmx ,tmaxfd,stemax,deemax,epsil,stmin); // G10 layer in MCMs - AliMedium(19,"MCM-G10" ,12,0,isxfld,sxmgmx + AliMedium(19,"MCM-G10" ,54,0,isxfld,sxmgmx ,tmaxfd,stemax,deemax,epsil,stmin); // Si in readout chips - AliMedium(20,"Chip-Si" ,16,0,isxfld,sxmgmx + AliMedium(20,"Chip-Si" , 6,0,isxfld,sxmgmx ,tmaxfd,stemax,deemax,epsil,stmin); // Epoxy in readout chips - AliMedium(21,"Chip-Ep" ,17,0,isxfld,sxmgmx + AliMedium(21,"Chip-Ep" ,57,0,isxfld,sxmgmx ,tmaxfd,stemax,deemax,epsil,stmin); // PE in connectors - AliMedium(22,"Conn-PE" , 3,0,isxfld,sxmgmx + AliMedium(22,"Conn-PE" ,52,0,isxfld,sxmgmx ,tmaxfd,stemax,deemax,epsil,stmin); // Cu in connectors - AliMedium(23,"Chip-Cu" , 5,0,isxfld,sxmgmx + AliMedium(23,"Chip-Cu" , 2,0,isxfld,sxmgmx ,tmaxfd,stemax,deemax,epsil,stmin); // Al of cooling pipes AliMedium(24,"Cooling" , 1,0,isxfld,sxmgmx ,tmaxfd,stemax,deemax,epsil,stmin); // Cu in services - AliMedium(25,"Serv-Cu" , 5,0,isxfld,sxmgmx + AliMedium(25,"Serv-Cu" , 2,0,isxfld,sxmgmx + ,tmaxfd,stemax,deemax,epsil,stmin); + // Carbon fiber mat + AliMedium(26,"Carbon" , 4,0,isxfld,sxmgmx + ,tmaxfd,stemax,deemax,epsil,stmin); + // Mylar foil + AliMedium(27,"Mylar" ,59,0,isxfld,sxmgmx + ,tmaxfd,stemax,deemax,epsil,stmin); + // Polypropylene fibers + AliMedium(28,"Fiber" ,60,0,isxfld,sxmgmx ,tmaxfd,stemax,deemax,epsil,stmin); // Save the density values for the TRD absorbtion Float_t dmy = 1.39; fFoilDensity = dmy; - if (AliTRDSimParam::Instance()->IsXenon()) { + if (AliTRDCommonParam::Instance()->IsXenon()) { fGasDensity = dgmXe; fGasNobleFraction = fxc; } - else if (AliTRDSimParam::Instance()->IsArgon()) { + else if (AliTRDCommonParam::Instance()->IsArgon()) { fGasDensity = dgmAr; fGasNobleFraction = fac; } @@ -538,14 +553,6 @@ void AliTRD::Init() AliError("Not a valid geometry"); } - // Special tracking options for charged particles for XeCO2 - gMC->Gstpar((* fIdtmed)[9],"DRAY" , 1.0); - gMC->Gstpar((* fIdtmed)[9],"STRA" , 1.0); - gMC->Gstpar((* fIdtmed)[9],"LOSS" ,13.0); // Specific energy loss - // Parameters related to Fluka MC machine - //gMC->Gstpar((* fIdtmed)[9],"PRIMIO_E",23.53); // 1st ionisation potential - //gMC->Gstpar((* fIdtmed)[9],"PRIMIO_N",19.344431); // Number of primaries - } //_____________________________________________________________________________ @@ -598,30 +605,61 @@ Bool_t AliTRD::Raw2SDigits(AliRawReader *rawReader) tree = loader->TreeS(); } + AliTRDdigitizer digitizer("TRDdigitizer","TRD digitizer class"); + AliTRDrawData *rawdata = new AliTRDrawData(); - AliTRDdigitsManager *sdigitsManager = rawdata->Raw2Digits(rawReader); + AliTRDdigitsManager *digitsManager = rawdata->Raw2Digits(rawReader); + + // Create the s-digits manager + AliTRDdigitsManager *sdigitsManager = new AliTRDdigitsManager(); + if (sdigitsManager) { + sdigitsManager->SetSDigits(kTRUE); + sdigitsManager->CreateArrays(); + + // Convert the digits into s-digits + digitizer.Digits2SDigits(digitsManager,sdigitsManager); + sdigitsManager->MakeBranch(tree); sdigitsManager->WriteDigits(); + + delete digitsManager; + return kTRUE; + } else { + return kFALSE; + } } //_____________________________________________________________________________ -AliLoader* AliTRD::MakeLoader(const char* topfoldername) +AliLoader *AliTRD::MakeLoader(const Char_t *topfoldername) { + // + // Create a loader for the TRD tracklets + // + fLoader = new AliLoader(GetName(),topfoldername); AliInfo("Adding Tracklets-loader"); - AliDataLoader *dl = new AliDataLoader("TRD.Tracklets.root","tracklets", "tracklets"); + + AliDataLoader *dl = new AliDataLoader("TRD.Tracklets.root" + ,"tracklets" + ,"tracklets"); + fLoader->AddDataLoader(dl); + + dl = new AliDataLoader("TRD.GtuTracks.root" + ,"gtutracks" + ,"gtutracks"); fLoader->AddDataLoader(dl); return fLoader; + } //_____________________________________________________________________________