X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=blobdiff_plain;f=EMCAL%2FAliEMCALv2.cxx;h=b2bc9300e44c748c522eb824e9c36888aa0391f3;hp=941ec8739e17006bea7da86d084e7564f58d9b65;hb=80b9610c2f7108e667b4b6978a00b37b5f83941c;hpb=5bf6eb16f2184440f127fb13aa4634e69f287d09 diff --git a/EMCAL/AliEMCALv2.cxx b/EMCAL/AliEMCALv2.cxx index 941ec8739e1..b2bc9300e44 100644 --- a/EMCAL/AliEMCALv2.cxx +++ b/EMCAL/AliEMCALv2.cxx @@ -29,7 +29,6 @@ // --- ROOT system --- #include #include -#include #include #include #include @@ -45,25 +44,21 @@ #include "AliHeader.h" #include "AliMC.h" #include "AliStack.h" -#include "AliPoints.h" +#include "AliTrackReference.h" // for TRD1 case only; May 31,2006 ClassImp(AliEMCALv2) //______________________________________________________________________ AliEMCALv2::AliEMCALv2() - : AliEMCALv1(), - fHDe(0), - fHNhits(0) + : AliEMCALv1() { // ctor } //______________________________________________________________________ AliEMCALv2::AliEMCALv2(const char *name, const char *title) - : AliEMCALv1(name,title), - fHDe(0), - fHNhits(0) + : AliEMCALv1(name,title) { // Standard Creator. @@ -75,16 +70,6 @@ AliEMCALv2::AliEMCALv2(const char *name, const char *title) fTimeCut = 30e-09; fGeometry = GetGeometry(); - fHDe = fHNhits = 0; - // if (gDebug>0){ - if (1){ - TH1::AddDirectory(0); - fHDe = new TH1F("fHDe","De in EMCAL", 1000, 0., 10.); - fHNhits = new TH1F("fHNhits","#hits in EMCAL", 2001, -0.5, 2000.5); - fHistograms->Add(fHDe); - fHistograms->Add(fHNhits); - TH1::AddDirectory(1); - } } //______________________________________________________________________ @@ -131,6 +116,7 @@ void AliEMCALv2::AddHit(Int_t shunt, Int_t primary, Int_t tracknumber, Int_t ipa // printf(" fNhits %i \n", fNhits); delete newHit; } + //______________________________________________________________________ void AliEMCALv2::StepManager(void){ // Accumulates hits as long as the track stays in a tower @@ -143,8 +129,8 @@ void AliEMCALv2::StepManager(void){ static Float_t ienergy = 0; // part->Energy(); static TString curVolName; static int supModuleNumber, moduleNumber, yNumber, xNumber, absid; - static int keyGeom=1; - static char *vn = "SCMX"; // Apr 13, 2006 - only TRD1 case now + static int keyGeom=1; //real TRD1 geometry + static const char *vn = "SCMX"; // Apr 13, 2006 - only TRD1 case now static int nSMOP[7]={1,3,5,7,9,11}; // 30-mar-05 static int nSMON[7]={2,4,6,8,10,12}; static Float_t depositedEnergy=0.0; @@ -160,6 +146,8 @@ void AliEMCALv2::StepManager(void){ if(gMC->VolId("WSUC")==1) printf(" WSUC - cosmic ray stand geometry \n"); } Int_t tracknumber = gAlice->GetMCApp()->GetCurrentTrackNumber(); + Int_t parent; + TParticle* part; curVolName = gMC->CurrentVolName(); if(curVolName.Contains(vn) || curVolName.Contains("SCX")) { // We are in a scintillator layer; SCX for 3X3 @@ -171,16 +159,20 @@ void AliEMCALv2::StepManager(void){ if (fCurParent==-1 || tracknumber != fCurTrack) { // Check parentage - Int_t parent=tracknumber; + parent=tracknumber; + if (fCurParent != -1) { while (parent != fCurParent && parent != -1) { - TParticle *part=gAlice->GetMCApp()->Particle(parent); + //TParticle *part=gAlice->GetMCApp()->Particle(parent); + part=gAlice->GetMCApp()->Particle(parent); parent=part->GetFirstMother(); } } if (fCurParent==-1 || parent==-1) { - Int_t parent=tracknumber; - TParticle *part=gAlice->GetMCApp()->Particle(parent); + //Int_t parent=tracknumber; + //TParticle *part=gAlice->GetMCApp()->Particle(parent); + parent=tracknumber; + part=gAlice->GetMCApp()->Particle(parent); while (parent != -1 && fGeometry->IsInEMCAL(part->Vx(),part->Vy(),part->Vz())) { parent=part->GetFirstMother(); if (parent!=-1) @@ -190,8 +182,13 @@ void AliEMCALv2::StepManager(void){ if (fCurParent==-1) Error("StepManager","Cannot find parent"); else { - TParticle *part=gAlice->GetMCApp()->Particle(fCurParent); + //TParticle *part=gAlice->GetMCApp()->Particle(fCurParent); + part=gAlice->GetMCApp()->Particle(fCurParent); ienergy = part->Energy(); + + //Add reference to parent in TR tree. + AddTrackReference(tracknumber, AliTrackReference::kEMCAL); + } while (parent != -1) { part=gAlice->GetMCApp()->Particle(parent); @@ -226,7 +223,7 @@ void AliEMCALv2::StepManager(void){ if (strcmp(gMC->CurrentVolOffName(0),"SCX1")==0) xNumber=1; else if(strcmp(gMC->CurrentVolOffName(0),"SCX2")==0) xNumber=2; else if(strcmp(gMC->CurrentVolOffName(0),"SCX3")==0) xNumber=3; - else Fatal("StepManager()", "Wrong name of sensetive volume in 3X3 case : %s ", gMC->CurrentVolOffName(0)); + else Fatal("StepManager()", "Wrong name of sensitive volume in 3X3 case : %s ", gMC->CurrentVolOffName(0)); } } else { gMC->CurrentVolOffID(5, supModuleNumber); @@ -274,40 +271,13 @@ void AliEMCALv2::StepManager(void){ } } -void AliEMCALv2::FinishEvent() -{ - // Calculate deposit energy and fill control histogram; 26-may-05 - static double de=0.; - fHNhits->Fill(double(fHits->GetEntries())); - de = GetDepositEnergy(0); - if(fHDe) fHDe->Fill(de); -} - -Double_t AliEMCALv2::GetDepositEnergy(int print) -{ - // 23-mar-05 - for testing - if(fHits == 0) return 0.; - AliEMCALHit *hit=0; - Double_t de=0.; - for(int ih=0; ihGetEntries(); ih++) { - hit = (AliEMCALHit*)fHits->UncheckedAt(ih); - de += hit->GetEnergy(); - } - if(print>0) { - cout<<"AliEMCALv2::GetDepositEnergy() : fHits "<GetEntries(), de); - if(print>1) { - printf(" #primary particles %i\n", gAlice->GetHeader()->GetNprimary()); - } - } - return de; -} - +//___________________________________________________________ void AliEMCALv2::Browse(TBrowser* b) { TObject::Browse(b); } +//___________________________________________________________ void AliEMCALv2::DrawCalorimeterCut(const char *name, int axis, double dcut) { // Size of tower is 5.6x5.6x24.8 (25.0); cut on Z axiz @@ -329,7 +299,7 @@ void AliEMCALv2::DrawCalorimeterCut(const char *name, int axis, double dcut) st += ", zcut, "; st += name; - char *optShad = "on", *optHide="on"; + const char *optShad = "on", *optHide="on"; double cxy=0.02; if (axis==1) { dcut = 0.; @@ -350,12 +320,13 @@ void AliEMCALv2::DrawCalorimeterCut(const char *name, int axis, double dcut) printf("%s\n",cmd); gROOT->ProcessLine(cmd); } +//___________________________________________________________ void AliEMCALv2::DrawSuperModuleCut(const char *name, int axis, double dcut, int fill) { // Size of tower is 5.6x5.6x24.8 (25.0); cut on Z axiz TString sn(GetGeometry()->GetName()); sn.ToUpper(); - char *tit[3]={"xcut", "ycut", "zcut"}; + const char *tit[3]={"xcut", "ycut", "zcut"}; if(axis<1) axis=1; if(axis>3) axis=3; gMC->Gsatt("*", "seen", 0); @@ -365,24 +336,19 @@ void AliEMCALv2::DrawSuperModuleCut(const char *name, int axis, double dcut, int SetVolumeAttributes(name, 1, 5, fill); // yellow double cxy=0.055, x0=10., y0=10.; - char *optShad = "on", *optHide="on"; - if(sn.Contains("TRD1")) { - SetVolumeAttributes("STPL", 1, 3, fill); // green - if (axis==1) { - gMC->Gsatt("STPL", "seen", 0); - dcut = 0.; - optHide = "off"; - optShad = "off"; - } else if(axis==3) cxy = 0.1; - } else if(sn.Contains("TRD2")) { - y0 = -10.; - if (axis==2) cxy=0.06; - } + const char *optShad = "on", *optHide="on"; + SetVolumeAttributes("STPL", 1, 3, fill); // green + if (axis==1) { + gMC->Gsatt("STPL", "seen", 0); + dcut = 0.; + optHide = "off"; + optShad = "off"; + } else if(axis==3) cxy = 0.1; + gMC->Gdopt("hide", optHide); gMC->Gdopt("shad", optShad); TString st("Shish-Kebab, Compact, SMOD, "); - if(sn.Contains("TWIST")) st = "Shish-Kebab, Twist, SMOD, "; st += tit[axis-1];; gROOT->ProcessLine("TGeant3 *g3 = (TGeant3*)gMC"); @@ -393,29 +359,16 @@ void AliEMCALv2::DrawSuperModuleCut(const char *name, int axis, double dcut, int sprintf(cmd,"gMC->Gdhead(1111, \"%s\")\n", st.Data()); printf("%s\n",cmd); gROOT->ProcessLine(cmd); // hint for testing - if(sn.Contains("TRD1")){ - printf("Begin of super module\n"); - printf("g3->Gdrawc(\"SMOD\", 2, 0.300, 89., 10., 0.5, 0.5)\n"); - printf("Center of super modules\n"); - printf("g3->Gdrawc(\"SMOD\", 2, 0.300, 0., 10., 0.5, 0.5)\n"); - printf("end of super modules\n"); - printf("g3->Gdrawc(\"SMOD\", 2, 0.300, -70., 10., 0.5, 0.5)\n"); - } else if(sn.Contains("TRD2")){ - printf("Begin of super module ** TRD2 ** \n"); - printf("g3->Gdrawc(\"SMOD\", 2, 0.00, 40., -80, 0.2, 0.2)\n"); - printf("end of super modules\n"); - printf("g3->Gdrawc(\"SMOD\", 2, 0.00, -20., -80, 0.2, 0.2)\n"); - - printf(" *** Z cut (Y|X plane)\n scale 0.4\n"); - printf("g3->Gdrawc(\"SMOD\", 3, -170.,-165.,10.,0.4,0.4)\n"); - printf(" scale 0.2\n"); - printf("g3->Gdrawc(\"SMOD\", 3, -170.,-80.,10.,0.2,0.2)\n"); - printf(" scale 0.12\n"); - printf("g3->Gdrawc(\"SMOD\", 3, -170.,-45.,10.,0.12,0.12)\n"); - } + printf("Begin of super module\n"); + printf("g3->Gdrawc(\"SMOD\", 2, 0.300, 89., 10., 0.5, 0.5)\n"); + printf("Center of super modules\n"); + printf("g3->Gdrawc(\"SMOD\", 2, 0.300, 0., 10., 0.5, 0.5)\n"); + printf("end of super modules\n"); + printf("g3->Gdrawc(\"SMOD\", 2, 0.300, -70., 10., 0.5, 0.5)\n"); } -void AliEMCALv2::DrawTowerCut(const char *name, int axis, double dcut, int fill, char *optShad) +//___________________________________________________________ +void AliEMCALv2::DrawTowerCut(const char *name, int axis, double dcut, int fill, const char *optShad) { // Size of tower is 5.6x5.6x24.8 (25.0); cut on Z axiz if(axis<1) axis=1; if(axis>3) axis=3; @@ -435,13 +388,7 @@ void AliEMCALv2::DrawTowerCut(const char *name, int axis, double dcut, int fill, SetVolumeAttributes("SCMY", 1, 5, fill); // yellow } else if(mn == "SCMY") { // first division SetVolumeAttributes(mn.Data(), 1, 1, fill); - if(sn.Contains("TEST") && sn.Contains("3X3")) { - SetVolumeAttributes("SCX1", 1, 5, fill); // yellow - SetVolumeAttributes("SCX2", 1, 2, fill); // red - SetVolumeAttributes("SCX3", 1, 3, fill); // green - } else { - SetVolumeAttributes("SCMX", 1, 5, fill); // yellow - } + SetVolumeAttributes("SCMX", 1, 5, fill); // yellow } else if(mn == "SCMX" || mn.Contains("SCX")) { SetVolumeAttributes(mn.Data(), 1, 5, fill);// yellow SetVolumeAttributes("PBTI", 1, 4, fill); @@ -449,25 +396,12 @@ void AliEMCALv2::DrawTowerCut(const char *name, int axis, double dcut, int fill, printf(" for volume |%s| did not defined volume attributes\n", mn.Data()); } - // TString st("Shish-Kebab, 2x2 mm sampling, 62 layers, "); - TString st("Shashlyk, 2x2 mm sampling, 62 layers, "); - if (sn.Contains("25")) st = "Shish-Kebab, 5x5 mm sampling, 25 layers, "; - else if(sn.Contains("MAY05")) st = "Shish-Kebab, 5x5 mm sampling, 77 layers, "; - if(sn.Contains("TRD1")) st += " TRD1, "; - if(sn.Contains("3X3")) st += " 3x3, "; + TString st("Shashlyk, 2x2 mm sampling, 77 layers, "); st += name; gROOT->ProcessLine("TGeant3 *g3 = (TGeant3*)gMC"); double cx=0.78, cy=2.; - if (axis==1 && sn.Contains("TRD")==0) { - cx = cy = 1.; - gMC->Gsatt("PBTI", "seen", 0); - } else if (sn.Contains("TEST") && sn.Contains("3X3")) { - cx = cy = 0.7; - if (axis==3) cx = cy = 1.; - } else if (sn.Contains("TRD2")) { - if (axis==3) cx = cy = 2.; - } else if (mn.Contains("EMOD")) { + if (mn.Contains("EMOD")) { cx = cy = 0.5; } char cmd[200]; @@ -481,7 +415,8 @@ void AliEMCALv2::DrawTowerCut(const char *name, int axis, double dcut, int fill, sprintf(cmd,"gMC->Gdhead(1111, \"%s\")\n", st.Data()); printf("%s\n",cmd); gROOT->ProcessLine(cmd); } - + +//___________________________________________________________ void AliEMCALv2::DrawAlicWithHits(int mode) { // 20-sep-04; does not work now @@ -521,6 +456,7 @@ void AliEMCALv2::DrawAlicWithHits(int mode) if(mode>0 && h2->Integral()>0.) h2->Draw(); } +//___________________________________________________________ void AliEMCALv2::SetVolumeAttributes(const char *name, int seen, int color, int fill) { /* seen=-2:volume is visible but none of its descendants; @@ -533,14 +469,10 @@ void AliEMCALv2::SetVolumeAttributes(const char *name, int seen, int color, int printf(" %s : seen %i color %i fill %i \n", name, seen, color, fill); } +//___________________________________________________________ void AliEMCALv2::TestIndexTransition(int pri, int idmax) { - // Test for EMCAL_SHISH geometry - TString sn(fGeometry->GetName()); - if(!sn.Contains("SHISH")) { - printf("Wrong geometry |%s| ! Bye \n", sn.Data()); - return; - } + // Test for EMCAL SHISHKEBAB geometry Int_t nSupMod, nModule, nIphi, nIeta, idNew, nGood=0; if(idmax==0) idmax = fGeometry->GetNCells();