X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TRD%2FAliTRD.cxx;h=bae9e18b5daad75f03e8f896d07a83db6aa1c8a5;hb=e4f80cd8939abda561b24d7f886037fa55f8e174;hp=b9d0ec8cce874ecb1d111a6c88d5a6cb8dd89dd3;hpb=00d6d986ad11ccc7f42de4f4e14851bb625d61c6;p=u%2Fmrichter%2FAliRoot.git diff --git a/TRD/AliTRD.cxx b/TRD/AliTRD.cxx index b9d0ec8cce8..bae9e18b5da 100644 --- a/TRD/AliTRD.cxx +++ b/TRD/AliTRD.cxx @@ -40,22 +40,25 @@ #include "AliConst.h" #include "AliDigit.h" #include "AliLoader.h" +#include "AliLog.h" +#include "AliMC.h" #include "AliMagF.h" #include "AliRun.h" #include "AliTRD.h" -#include "AliTRDcluster.h" -#include "AliTRDclusterizer.h" #include "AliTRDdigit.h" #include "AliTRDdigitizer.h" #include "AliTRDdigitsManager.h" -#include "AliTRDgeometryFull.h" -#include "AliTRDgeometryHole.h" +#include "AliTRDgeometry.h" #include "AliTRDhit.h" #include "AliTRDpoints.h" -#include "AliTRDrecPoint.h" -#include "AliTRDtrackHits.h" +#include "AliTRDrawData.h" #include "AliTrackReference.h" +#include "AliTRDSimParam.h" +#include "AliTRDRecParam.h" +#include "AliTRDCommonParam.h" +#include "AliTRDcalibDB.h" + ClassImp(AliTRD) //_____________________________________________________________________________ @@ -66,13 +69,9 @@ AliTRD::AliTRD() // fIshunt = 0; - fGasMix = 0; fHits = 0; fDigits = 0; - fRecPoints = 0; - fNRecPoints = 0; - fGeometry = 0; fGasDensity = 0; @@ -81,9 +80,6 @@ AliTRD::AliTRD() fDrawTR = 0; fDisplayType = 0; - fTrackHits = 0; - fHitType = 0; - } //_____________________________________________________________________________ @@ -102,33 +98,30 @@ AliTRD::AliTRD(const char *name, const char *title) exit(1); } - // Define the TRD geometry according to the FRAME geometry - if (frame->IsVersion() == 0) { - // Geometry with hole - fGeometry = new AliTRDgeometryHole(); - } - else if (frame->IsVersion() == 1) { - // Geometry without hole - fGeometry = new AliTRDgeometryFull(); + // Define the TRD geometry + if ((frame->IsVersion() == 0) || + (frame->IsVersion() == 1)) { + fGeometry = new AliTRDgeometry(); } else { Error("Ctor","Could not find valid FRAME version\n"); exit(1); } + // Save the geometry + TDirectory* saveDir = gDirectory; + gAlice->GetRunLoader()->CdGAFile(); + fGeometry->Write("TRDgeometry"); + saveDir->cd(); + // Allocate the hit array - fHits = new TClonesArray("AliTRDhit" ,405); - gAlice->AddHitList(fHits); + fHits = new TClonesArray("AliTRDhit" ,405); + gAlice->GetMCApp()->AddHitList(fHits); // Allocate the digits array - fDigits = 0; + fDigits = 0; - // Allocate the rec point array - fRecPoints = new TObjArray(400); - fNRecPoints = 0; - fIshunt = 0; - fGasMix = 1; fGasDensity = 0; fFoilDensity = 0; @@ -136,15 +129,12 @@ AliTRD::AliTRD(const char *name, const char *title) fDrawTR = 0; fDisplayType = 0; - fTrackHits = 0; - fHitType = 2; - SetMarkerColor(kWhite); } //_____________________________________________________________________________ -AliTRD::AliTRD(const AliTRD &trd) +AliTRD::AliTRD(const AliTRD &trd):AliDetector(trd) { // // Copy constructor @@ -171,55 +161,6 @@ AliTRD::~AliTRD() delete fHits; fHits = 0; } - if (fRecPoints) { - delete fRecPoints; - fRecPoints = 0; - } - if (fTrackHits) { - delete fTrackHits; - fTrackHits = 0; - } - -} - -//_____________________________________________________________________________ -void AliTRD::AddCluster(Float_t *pos, Int_t det, Float_t amp - , Int_t *tracks, Float_t *sig, Int_t iType) -{ - // - // Add a cluster for the TRD - // - - AliTRDcluster *c = new AliTRDcluster(); - - c->SetDetector(det); - c->AddTrackIndex(tracks); - c->SetQ(amp); - c->SetY(pos[0]); - c->SetZ(pos[1]); - c->SetSigmaY2(sig[0]); - c->SetSigmaZ2(sig[1]); - c->SetLocalTimeBin(((Int_t) pos[2])); - - switch (iType) { - case 0: - c->Set2pad(); - break; - case 1: - c->Set3pad(); - break; - case 2: - c->Set4pad(); - break; - case 3: - c->Set5pad(); - break; - case 4: - c->SetLarge(); - break; - }; - - fRecPoints->Add(c); } @@ -229,32 +170,26 @@ void AliTRD::Hits2Digits() // // Create digits // - if (!fLoader->TreeH()) fLoader->LoadHits("read"); - SetTreeAddress(); - - AliTRDdigitizer *digitizer = new AliTRDdigitizer("TRDdigitizer" - ,"TRD digitizer class"); - digitizer->SetDebug(GetDebug()); - digitizer->SetEvent(gAlice->GetEvNumber()); + + AliTRDdigitizer digitizer("TRDdigitizer","TRD digitizer class"); + AliLog::SetClassDebugLevel("TRDdigitizer",AliDebugLevel()); // Initialization - digitizer->InitDetector(); + digitizer.InitDetector(); - // Create the digits - digitizer->MakeDigits(); - - // Write the digits into the input file - - if (!fLoader->TreeD()) fLoader->MakeTree("D"); - if (digitizer->MakeBranch(fLoader->TreeD())) { - - digitizer->WriteDigits(); - - // Save the digitizer class in the AliROOT - digitizer->Write(); + if (!fLoader->TreeH()) fLoader->LoadHits("read"); + fLoader->LoadDigits("recreate"); + AliRunLoader* runLoader = fLoader->GetRunLoader(); + for (Int_t iEvent = 0; iEvent < runLoader->GetNumberOfEvents(); iEvent++) { + digitizer.Open(runLoader->GetFileName().Data(), iEvent); + digitizer.MakeDigits(); + digitizer.WriteDigits(); } + fLoader->UnloadHits(); + fLoader->UnloadDigits(); + } //_____________________________________________________________________________ @@ -263,34 +198,38 @@ void AliTRD::Hits2SDigits() // // Create summable digits // - if (!fLoader->TreeH()) fLoader->LoadHits("read"); - SetTreeAddress(); - - AliTRDdigitizer *digitizer = new AliTRDdigitizer("TRDdigitizer" - ,"TRD digitizer class"); - digitizer->SetDebug(GetDebug()); + AliTRDdigitizer digitizer("TRDdigitizer","TRD digitizer class"); // For the summable digits - digitizer->SetSDigits(kTRUE); - digitizer->SetEvent(gAlice->GetEvNumber()); + digitizer.SetSDigits(kTRUE); + AliLog::SetClassDebugLevel("TRDdigitizer",AliDebugLevel()); // Initialization - digitizer->InitDetector(); + digitizer.InitDetector(); - // Create the TRD s-digits branch - digitizer->MakeDigits(); - - // Write the digits into the input file - if (!fLoader->TreeS()) fLoader->MakeTree("S"); - - if (digitizer->MakeBranch(fLoader->TreeS())) { + if (!fLoader->TreeH()) fLoader->LoadHits("read"); + fLoader->LoadSDigits("recreate"); + AliRunLoader* runLoader = fLoader->GetRunLoader(); - digitizer->WriteDigits(); + for (Int_t iEvent = 0; iEvent < runLoader->GetNumberOfEvents(); iEvent++) { + digitizer.Open(runLoader->GetFileName().Data(), iEvent); + digitizer.MakeDigits(); + digitizer.WriteDigits(); + } - // Save the digitizer class in the AliROOT - digitizer->Write(); + fLoader->UnloadHits(); + fLoader->UnloadSDigits(); + +} - } +//_____________________________________________________________________________ +AliDigitizer* AliTRD::CreateDigitizer(AliRunDigitizer* manager) const +{ + // + // Creates a new digitizer object + // + + return new AliTRDdigitizer(manager); } @@ -301,23 +240,22 @@ void AliTRD::SDigits2Digits() // Create final digits from summable digits // - // Create the TRD digitizer - AliTRDdigitizer *digitizer = new AliTRDdigitizer("TRDdigitizer" - ,"TRD digitizer class"); - digitizer->SetDebug(GetDebug()); + // Create the TRD digitizer + AliTRDdigitizer digitizer("TRDdigitizer","TRD digitizer class"); + AliLog::SetClassDebugLevel("TRDdigitizer",AliDebugLevel()); // Set the parameter - digitizer->SetEvent(gAlice->GetEvNumber()); + digitizer.SetEvent(gAlice->GetEvNumber()); // Initialization - digitizer->InitDetector(); + digitizer.InitDetector(); // Read the s-digits via digits manager - AliTRDdigitsManager *sdigitsManager = new AliTRDdigitsManager(); + AliTRDdigitsManager sdigitsManager; - sdigitsManager->SetDebug(GetDebug()); - sdigitsManager->SetSDigits(kTRUE); - sdigitsManager->CreateArrays(); + AliLog::SetClassDebugLevel("TRDdigitisManager",AliDebugLevel()); + sdigitsManager.SetSDigits(kTRUE); + sdigitsManager.CreateArrays(); if (!fLoader->TreeS()) if (fLoader->LoadSDigits("read")) @@ -327,22 +265,46 @@ void AliTRD::SDigits2Digits() } if (!fLoader->TreeS()) return; - sdigitsManager->ReadDigits(fLoader->TreeS()); + sdigitsManager.ReadDigits(fLoader->TreeS()); // Add the s-digits to the input list - digitizer->AddSDigitsManager(sdigitsManager); + digitizer.AddSDigitsManager(&sdigitsManager); // Convert the s-digits to normal digits - digitizer->SDigits2Digits(); + digitizer.SDigits2Digits(); // Store the digits if (!fLoader->TreeD()) fLoader->MakeTree("D"); - if (digitizer->MakeBranch(fLoader->TreeD())){ - digitizer->WriteDigits(); + if (digitizer.MakeBranch(fLoader->TreeD())){ + digitizer.WriteDigits(); } } +//_____________________________________________________________________________ +void AliTRD::Digits2Raw() +{ + // + // convert digits of the current event to raw data + // + + fLoader->LoadDigits(); + TTree* digits = fLoader->TreeD(); + if (!digits) { + Error("Digits2Raw", "no digits tree"); + return; + } + + AliTRDrawData rawWriter; + // rawWriter.SetDebug(2); + if (!rawWriter.Digits2Raw(digits)) { + Error("AliTRD::Digits2Raw","The raw writer could not load the digits tree"); + } + + fLoader->UnloadDigits(); + +} + //_____________________________________________________________________________ void AliTRD::AddHit(Int_t track, Int_t det, Float_t *hits, Int_t q , Bool_t inDrift) @@ -350,18 +312,17 @@ void AliTRD::AddHit(Int_t track, Int_t det, Float_t *hits, Int_t q // // Add a hit for the TRD // - // The data structure is set according to fHitType: - // bit0: standard TClonesArray - // bit1: compressed trackHits structure - // - if (fHitType & 1) { - TClonesArray &lhits = *fHits; - new(lhits[fNhits++]) AliTRDhit(fIshunt,track,det,hits,q); + TClonesArray &lhits = *fHits; + AliTRDhit *hit = new(lhits[fNhits++]) AliTRDhit(fIshunt,track,det,hits,q); + if (inDrift) { + hit->SetDrift(); } - - if (fHitType > 1) { - AddHit2(track,det,hits,q,inDrift); + else { + hit->SetAmplification(); + } + if (q < 0) { + hit->SetTRphoton(); } } @@ -468,21 +429,17 @@ void AliTRD::BuildGeometry() } //_____________________________________________________________________________ -void AliTRD::Copy(TObject &trd) +void AliTRD::Copy(TObject &trd) const { // // Copy function // - ((AliTRD &) trd).fGasMix = fGasMix; ((AliTRD &) trd).fGeometry = fGeometry; - ((AliTRD &) trd).fRecPoints = fRecPoints; - ((AliTRD &) trd).fNRecPoints = fNRecPoints; ((AliTRD &) trd).fGasDensity = fGasDensity; ((AliTRD &) trd).fFoilDensity = fFoilDensity; ((AliTRD &) trd).fDrawTR = fDrawTR; ((AliTRD &) trd).fDisplayType = fDisplayType; - ((AliTRD &) trd).fHitType = fHitType; //AliDetector::Copy(trd); @@ -498,8 +455,7 @@ void AliTRD::CreateGeometry() // Check that FRAME is there otherwise we have no place where to put the TRD AliModule* frame = gAlice->GetModule("FRAME"); if (!frame) { - printf(" The TRD needs the FRAME to be defined first\n"); - return; + AliFatal("The TRD needs the FRAME to be defined first"); } fGeometry->CreateGeometry(fIdtmed->GetArray() - 1299); @@ -511,54 +467,73 @@ void AliTRD::CreateMaterials() { // // Create the materials for the TRD - // Origin Y.Foka // Int_t isxfld = gAlice->Field()->Integ(); Float_t sxmgmx = gAlice->Field()->Max(); // For polyethilene (CH2) - Float_t ape[2] = { 12., 1. }; - Float_t zpe[2] = { 6., 1. }; - Float_t wpe[2] = { 1., 2. }; + 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 mylar (C5H4O2) - Float_t amy[3] = { 12., 1., 16. }; - Float_t zmy[3] = { 6., 1., 8. }; - Float_t wmy[3] = { 5., 4., 2. }; + Float_t amy[3] = { 12.011 , 1.0079, 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; // For CO2 - Float_t aco[2] = { 12., 16. }; - Float_t zco[2] = { 6., 8. }; - Float_t wco[2] = { 1., 2. }; - Float_t dco = 0.001977; + 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; // For water - Float_t awa[2] = { 1., 16. }; - Float_t zwa[2] = { 1., 8. }; - Float_t wwa[2] = { 2., 1. }; + 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 isobutane (C4H10) - Float_t ais[2] = { 12., 1. }; - Float_t zis[2] = { 6., 1. }; - Float_t wis[2] = { 4., 10. }; + Float_t ais[2] = { 12.011 , 1.0079 }; + Float_t zis[2] = { 6.0 , 1.0 }; + Float_t wis[2] = { 4.0 , 10.0 }; Float_t dis = 0.00267; // For plexiglas (C5H8O2) - Float_t apg[3] = { 12.011 , 1.0 , 15.9994 }; - Float_t zpg[3] = { 6.0 , 1.0 , 8.0 }; - Float_t wpg[3] = { 5.0 , 8.0 , 2.0 }; + 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; + + // 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 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-3; + + // 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 + Float_t aXeCO2[3] = { 131.29 , 12.0107 , 15.9994 }; + Float_t zXeCO2[3] = { 54.0 , 6.0 , 8.0 }; + Float_t wXeCO2[3] = { 0.85 , 0.0375 , 0.1125 }; // Xe-content of the Xe/CO2-mixture (85% / 15%) - Float_t fxc = .85; - // Xe-content of the Xe/Isobutane-mixture (97% / 3%) - Float_t fxi = .97; - Float_t dxe = .005858; + Float_t fxc = 0.85; + Float_t dxe = 0.00549; + Float_t dgm = fxc * dxe + (1.0 - fxc) * dco; // General tracking parameter Float_t tmaxfd = -10.; @@ -567,56 +542,29 @@ void AliTRD::CreateMaterials() Float_t epsil = 1e-4; Float_t stmin = -0.001; - Float_t absl, radl, d, buf[1]; - Float_t agm[2], zgm[2], wgm[2]; - Float_t dgm1, dgm2; - Int_t nbuf; - ////////////////////////////////////////////////////////////////////////// // Define Materials ////////////////////////////////////////////////////////////////////////// AliMaterial( 1, "Al" , 26.98, 13.0, 2.7 , 8.9 , 37.2); - AliMaterial( 2, "Air" , 14.61, 7.3, 0.001205, 30420.0 , 67500.0); - AliMaterial( 4, "Xe" , 131.29, 54.0, dxe , 1447.59, 0.0); + 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(12, "G10" , 20.00, 10.0, 1.7 , 19.4 , 999.0); 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(17, "Epoxy", 17.75, 8.9, 1.8 , 21.82, 999.0); // Mixtures - AliMixture(3, "Polyethilene", ape, zpe, dpe, -2, wpe); - AliMixture(7, "Mylar", amy, zmy, dmy, -3, wmy); - AliMixture(8, "CO2", aco, zco, dco, -2, wco); - AliMixture(9, "Isobutane", ais, zis, dis, -2, wis); - AliMixture(13,"Water", awa, zwa, dwa, -2, wwa); - AliMixture(14,"Plexiglas", apg, zpg, dpg, -3, wpg); - - // Gas mixtures - Char_t namate[21]=""; - // Xe/CO2-mixture - // Get properties of Xe - gMC->Gfmate((*fIdmate)[4], namate, agm[0], zgm[0], d, radl, absl, buf, nbuf); - // Get properties of CO2 - gMC->Gfmate((*fIdmate)[8], namate, agm[1], zgm[1], d, radl, absl, buf, nbuf); - // Create gas mixture - wgm[0] = fxc; - wgm[1] = 1. - fxc; - dgm1 = wgm[0] * dxe + wgm[1] * dco; - AliMixture(10, "Gas mixture 1", agm, zgm, dgm1, 2, wgm); - // Xe/Isobutane-mixture - // Get properties of Xe - gMC->Gfmate((*fIdmate)[4], namate, agm[0], zgm[0], d, radl, absl, buf, nbuf); - // Get properties of Isobutane - gMC->Gfmate((*fIdmate)[9], namate, agm[1], zgm[1], d, radl, absl, buf, nbuf); - // Create gas mixture - wgm[0] = fxi; - wgm[1] = 1. - fxi; - dgm2 = wgm[0] * dxe + wgm[1] * dis; - AliMixture(11, "Gas mixture 2", agm, zgm, dgm2, 2, wgm); - + AliMixture(2, "Air" , aAir, zAir, dAir, 4, wAir ); + AliMixture(3, "Polyethilene", ape, zpe, dpe, -2, wpe ); + AliMixture(7, "Mylar", amy, zmy, dmy, -3, wmy ); + AliMixture(8, "CO2", aco, zco, dco, -2, wco ); + AliMixture(9, "Isobutane", ais, zis, dis, -2, wis ); + AliMixture(10,"Gas mixture", aXeCO2, zXeCO2, dgm, 3, wXeCO2); + 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); + ////////////////////////////////////////////////////////////////////////// // Tracking Media Parameters ////////////////////////////////////////////////////////////////////////// @@ -645,16 +593,9 @@ void AliTRD::CreateMaterials() // Mylar foils AliMedium(8, "Mylar", 7, 0, isxfld, sxmgmx , tmaxfd, stemax, deemax, epsil, stmin); - if (fGasMix == 1) { - // Gas-mixture (Xe/CO2) - AliMedium(9, "Gas-mix", 10, 1, isxfld, sxmgmx - , tmaxfd, stemax, deemax, epsil, stmin); - } - else { - // Gas-mixture (Xe/Isobutane) - AliMedium(9, "Gas-mix", 11, 1, isxfld, sxmgmx - , tmaxfd, stemax, deemax, epsil, stmin); - } + // Gas-mixture (Xe/CO2) + AliMedium(9, "Gas-mix", 10, 1, isxfld, sxmgmx + , tmaxfd, stemax, deemax, epsil, stmin); // Nomex-honeycomb (use carbon for the time being) AliMedium(10, "Nomex", 6, 0, isxfld, sxmgmx , tmaxfd, stemax, deemax, epsil, stmin); @@ -700,13 +641,13 @@ void AliTRD::CreateMaterials() // 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 + , tmaxfd, stemax, deemax, epsil, stmin); // Save the density values for the TRD absorbtion fFoilDensity = dmy; - if (fGasMix == 1) - fGasDensity = dgm1; - else - fGasDensity = dgm2; + fGasDensity = dgm; } @@ -745,17 +686,7 @@ void AliTRD::DrawModule() const gMC->Gsatt("BTR2","SEEN", 0); gMC->Gsatt("BTR3","SEEN", 0); gMC->Gsatt("UTR1","SEEN", 0); - if (fGeometry->GetPHOShole()) - gMC->Gsatt("UTR2","SEEN", 0); - if (fGeometry->GetRICHhole()) - gMC->Gsatt("UTR3","SEEN", 0); } -// gMC->Gsatt("UCII","SEEN", 0); -// gMC->Gsatt("UCIM","SEEN", 0); -// gMC->Gsatt("UCIO","SEEN", 0); -// gMC->Gsatt("UL02","SEEN", 1); -// gMC->Gsatt("UL05","SEEN", 1); -// gMC->Gsatt("UL06","SEEN", 1); gMC->Gdopt("hide", "on"); gMC->Gdopt("shad", "on"); @@ -770,7 +701,7 @@ void AliTRD::DrawModule() const } //_____________________________________________________________________________ -Int_t AliTRD::DistancetoPrimitive(Int_t , Int_t ) const +Int_t AliTRD::DistancetoPrimitive(Int_t , Int_t ) { // // Distance between the mouse and the TRD detector on the screen @@ -787,61 +718,28 @@ void AliTRD::Init() // Initialize the TRD detector after the geometry has been created // - Int_t i; - - if (fDebug) { - printf("\n%s: ",ClassName()); - for (i = 0; i < 35; i++) printf("*"); - printf(" TRD_INIT "); - for (i = 0; i < 35; i++) printf("*"); - printf("\n"); - } + AliDebug(1,"++++++++++++++++++++++++++++++++++++++++++++++"); - if (fGeometry->IsVersion() == 0) { - printf("%s: Geometry for spaceframe with holes initialized\n",ClassName()); - } - else if (fGeometry->IsVersion() == 1) { - printf("%s: Geometry for spaceframe without holes initialized\n",ClassName()); - if (fGeometry->GetPHOShole()) - printf("%s: Leave space in front of PHOS free\n",ClassName()); - if (fGeometry->GetRICHhole()) - printf("%s: Leave space in front of RICH free\n",ClassName()); + if (fGeometry->IsVersion() != 1) { + AliError("Not a valid geometry"); } - if (fGasMix == 1) { - printf("%s: Gas Mixture: 85%% Xe + 15%% CO2\n",ClassName()); - } - else { - printf("%s: Gas Mixture: 97%% Xe + 3%% Isobutane\n",ClassName()); - } - } //_____________________________________________________________________________ -void AliTRD::LoadPoints(Int_t track) +void AliTRD::LoadPoints(Int_t ) { // // Store x, y, z of all hits in memory. // Hit originating from TR photons are given a different color // - //if (!fDrawTR) { - // AliDetector::LoadPoints(track); - // return; - //} - - if ((fHits == 0) && (fTrackHits == 0)) return; + if (fHits == 0) return; - Int_t nhits; - if (fHitType < 2) { - nhits = fHits->GetEntriesFast(); - } - else { - nhits = fTrackHits->GetEntriesFast(); - } + Int_t nhits = fHits->GetEntriesFast(); if (nhits == 0) return; - Int_t tracks = gAlice->GetNtrack(); + Int_t tracks = gAlice->GetMCApp()->GetNtrack(); if (fPoints == 0) fPoints = new TObjArray(tracks); AliTRDhit *ahit; @@ -979,10 +877,6 @@ void AliTRD::MakeBranch(Option_t* option) MakeBranchInTree(gAlice->TreeD(),branchname,&fDigits,buffersize,0); } - if (fHitType > 1) { - MakeBranch2(option,0); - } - } //_____________________________________________________________________________ @@ -997,21 +891,6 @@ void AliTRD::ResetDigits() } -//_____________________________________________________________________________ -void AliTRD::ResetRecPoints() -{ - // - // Reset number of reconstructed points and the point array - // - - if (fRecPoints) { - fNRecPoints = 0; - Int_t nentr = fRecPoints->GetEntriesFast(); - for (Int_t i = 0; i < nentr; i++) delete fRecPoints->RemoveAt(i); - } - -} - //_____________________________________________________________________________ void AliTRD::SetTreeAddress() { @@ -1019,68 +898,10 @@ void AliTRD::SetTreeAddress() // Set the branch addresses for the trees. // - Char_t branchname[15]; - - if ( fLoader->TreeH() && (fHits == 0x0)) fHits = new TClonesArray("AliTRDhit",405); - AliDetector::SetTreeAddress(); - - TBranch *branch; - TTree *treeR = fLoader->TreeR(); - - if (treeR) { - sprintf(branchname,"%scluster",GetName()); - if (fRecPoints == 0x0) fRecPoints = new TObjArray(400); - if (fRecPoints) { - branch = treeR->GetBranch(branchname); - if (branch) { - branch->SetAddress(&fRecPoints); - } - } - } - - if (fHitType > 0) { - SetTreeAddress2(); - } - -} - -//_____________________________________________________________________________ -void AliTRD::SetGasMix(Int_t imix) -{ - // - // Defines the gas mixture (imix=0: Xe/Isobutane imix=1: Xe/CO2) - // - - if ((imix < 0) || (imix > 1)) { - printf("Wrong input value: %d\n",imix); - printf("Use standard setting\n"); - fGasMix = 1; - return; + if ( fLoader->TreeH() && (fHits == 0x0)) { + fHits = new TClonesArray("AliTRDhit",405); } - - fGasMix = imix; - -} - -//_____________________________________________________________________________ -void AliTRD::SetPHOShole() -{ - // - // Selects a geometry with a hole in front of the PHOS - // - - fGeometry->SetPHOShole(); - -} - -//_____________________________________________________________________________ -void AliTRD::SetRICHhole() -{ - // - // Selects a geometry with a hole in front of the RICH - // - - fGeometry->SetRICHhole(); + AliDetector::SetTreeAddress(); } @@ -1096,218 +917,6 @@ AliTRD &AliTRD::operator=(const AliTRD &trd) } -//_____________________________________________________________________________ -void AliTRD::FinishPrimary() -{ - // - // Store the hits in the containers after all primaries are finished - // - - if (fTrackHits) { - fTrackHits->FlushHitStack(); - } - -} - -//_____________________________________________________________________________ -void AliTRD::RemapTrackHitIDs(Int_t *map) -{ - // - // Remap the track IDs - // - - if (!fTrackHits) { - return; - } - - if (fTrackHits) { - TClonesArray *arr = fTrackHits->GetArray();; - for (Int_t i = 0; i < arr->GetEntriesFast(); i++){ - AliTrackHitsParamV2 *info = (AliTrackHitsParamV2 *) (arr->At(i)); - info->fTrackID = map[info->fTrackID]; - } - } - -} - -//_____________________________________________________________________________ -void AliTRD::ResetHits() -{ - // - // Reset the hits - // - - AliDetector::ResetHits(); - if (fTrackHits) { - fTrackHits->Clear(); - } - -} - -//_____________________________________________________________________________ -AliHit* AliTRD::FirstHit(Int_t track) -{ - // - // Return the first hit of a track - // - - if (fHitType > 1) { - return FirstHit2(track); - } - - return AliDetector::FirstHit(track); - -} - -//_____________________________________________________________________________ -AliHit* AliTRD::NextHit() -{ - // - // Returns the next hit of a track - // - - if (fHitType > 1) { - return NextHit2(); - } - - return AliDetector::NextHit(); - -} - -//_____________________________________________________________________________ -AliHit* AliTRD::FirstHit2(Int_t track) -{ - // - // Initializes the hit iterator. - // Returns the address of the first hit of a track. - // If >= 0 the track is read from disk, - // while if < 0 the first hit of the current - // track is returned. - // - - if (track >= 0) { - gAlice->ResetHits(); - TreeH()->GetEvent(track); - } - - if (fTrackHits) { - fTrackHits->First(); - return (AliHit*) fTrackHits->GetHit(); - } - else { - return 0; - } - -} - -//_____________________________________________________________________________ -AliHit* AliTRD::NextHit2() -{ - // - // Returns the next hit of the current track - // - - if (fTrackHits) { - fTrackHits->Next(); - return (AliHit *) fTrackHits->GetHit(); - } - else { - return 0; - } - -} - -//_____________________________________________________________________________ -void AliTRD::MakeBranch2(Option_t *option, const char *file) -{ - // - // Create a new branch in the current Root tree. - // The branch of fHits is automatically split. - // - - if (fHitType < 2) { - return; - } - - char branchname[10]; - sprintf(branchname,"%s2",GetName()); - - // Get the pointer to the header - const char *cH = strstr(option,"H"); - - if (!fTrackHits) { - fTrackHits = new AliTRDtrackHits(); - } - - - if (fTrackHits && TreeH() && cH) - { - TreeH()->Branch(branchname,"AliTRDtrackHits",&fTrackHits,fBufferSize,99); - Info("MakeBranch2","Making Branch %s for trackhits",branchname); - } -} - -//_____________________________________________________________________________ -void AliTRD::SetTreeAddress2() -{ - // - // Set the branch address for the trackHits tree - // - if (GetDebug()) Info("SetTreeAddress2",""); - - TBranch *branch; - char branchname[20]; - sprintf(branchname,"%s2",GetName()); - - // Branch address for hit tree - TTree *treeH = TreeH(); - if ((treeH) && (fHitType > 0)) { - branch = treeH->GetBranch(branchname); - if (branch) - { - branch->SetAddress(&fTrackHits); - if (GetDebug()) - Info("SetTreeAddress2","Success."); - } - else - { - if (GetDebug()) - Info("SetTreeAddress2","Can NOT get the branch %s",branchname); - } - } - -} - -//_____________________________________________________________________________ -void AliTRD::AddHit2(Int_t track, Int_t det, Float_t *hits, Int_t q - , Bool_t inDrift) -{ - // - // Add a hit to the list - // - - Int_t rtrack; - - if (fIshunt) { - Int_t primary = gAlice->GetPrimary(track); - gAlice->Particle(primary)->SetBit(kKeepBit); - rtrack = primary; - } - else { - rtrack = track; - gAlice->FlagTrack(track); - } - - if ((fTrackHits) && (fHitType > 0)) { - fTrackHits->AddHitTRD(det,rtrack,hits[0],hits[1],hits[2],q,inDrift); - } - -} - - - - -