]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EMCAL/AliEMCALv2.cxx
Updated version of ITS QA Checker and related modifications (Melinda)
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALv2.cxx
index 941ec8739e17006bea7da86d084e7564f58d9b65..b2bc9300e44c748c522eb824e9c36888aa0391f3 100644 (file)
@@ -29,7 +29,6 @@
 // --- ROOT system ---
 #include <TBrowser.h>
 #include <TClonesArray.h>
-#include <TH1.h>
 #include <TH2.h>
 #include <TParticle.h>
 #include <TROOT.h>
 #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; ih<fHits->GetEntries(); ih++) {
-    hit = (AliEMCALHit*)fHits->UncheckedAt(ih);
-    de += hit->GetEnergy();
-  }
-  if(print>0) {
-    cout<<"AliEMCALv2::GetDepositEnergy() : fHits "<<fHits<<endl; 
-    printf(" #hits %i de %f \n", 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("<W> 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();