]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ZDC/AliZDC.cxx
Removing a comma that gcc 3.4 does not like ;-)
[u/mrichter/AliRoot.git] / ZDC / AliZDC.cxx
index 255e2f66052d376b6b84f7195ed31d171c97c7ab..6ab2e141d1d206fe06e854bcb3b8ae394e8bdd6a 100644 (file)
@@ -30,6 +30,7 @@
 #include <TFile.h>
 #include <TSystem.h>
 #include <TRandom.h>
+#include <TParticle.h>
 
 // --- AliRoot header files
 #include "AliDetector.h"
@@ -47,7 +48,8 @@
 #include "AliZDCDigitizer.h"
 #include "AliZDCRawStream.h"
 #include "AliZDCPedestals.h"
-#include "AliZDCCalib.h"
+#include "AliZDCEnCalib.h"
+#include "AliZDCTowerCalib.h"
 #include "AliFstream.h"
 
  
@@ -58,8 +60,10 @@ AliZDC::AliZDC() :
   AliDetector(),
   fNoShower(0),
   fPedCalib(0),
-  fCalibData(0),
-  fZDCCalibFName("")
+  fEnCalibData(0),
+  fTowCalibData(0),
+  fZDCCalibFName(""),
+  fSpectatorTracked(1)
 {
   //
   // Default constructor for the Zero Degree Calorimeter base class
@@ -78,8 +82,10 @@ AliZDC::AliZDC(const char *name, const char *title) :
   AliDetector(name,title),
   fNoShower  (0),
   fPedCalib(0),
-  fCalibData(0),
-  fZDCCalibFName("")
+  fEnCalibData(0),
+  fTowCalibData(0),
+  fZDCCalibFName(""),
+  fSpectatorTracked(1)
 {
   //
   // Standard constructor for the Zero Degree Calorimeter base class
@@ -108,8 +114,9 @@ AliZDC::~AliZDC()
   //
 
   fIshunt = 0;
-  delete fPedCalib;
-  delete fCalibData;
+  if(fPedCalib) delete fPedCalib;
+  if(fEnCalibData) delete fEnCalibData;
+  if(fEnCalibData) delete fEnCalibData;
 
 }
 
@@ -118,8 +125,10 @@ AliZDC::AliZDC(const AliZDC& ZDC) :
 AliDetector("ZDC","ZDC"),
 fNoShower(ZDC.fNoShower),
 fPedCalib(ZDC.fPedCalib),
-fCalibData(ZDC.fCalibData),
-fZDCCalibFName(ZDC.fZDCCalibFName)
+fEnCalibData(ZDC.fEnCalibData),
+fTowCalibData(ZDC.fTowCalibData),
+fZDCCalibFName(ZDC.fZDCCalibFName),
+fSpectatorTracked(ZDC.fSpectatorTracked)
 {
   // copy constructor
 }
@@ -131,7 +140,8 @@ AliZDC& AliZDC::operator=(const AliZDC& ZDC)
   if(this!=&ZDC){
     fNoShower = ZDC.fNoShower;
     fPedCalib = ZDC.fPedCalib;
-    fCalibData = ZDC.fCalibData;
+    fEnCalibData = ZDC.fEnCalibData;
+    fTowCalibData = ZDC.fTowCalibData;
     fZDCCalibFName = ZDC.fZDCCalibFName;
   } return *this;
 }
@@ -143,7 +153,7 @@ void AliZDC::AddHit(Int_t track, Int_t *vol, Float_t *hits)
   //           Add a ZDC hit to the hit list.
   
   static Float_t trackTime=0., primKinEn=0., xImpact=0., yImpact=0., sFlag=0.;
-  static Int_t   pcPDGcode;
+  static Int_t   pcPDGcode, motPDGcode;
 
   AliZDCHit *newquad, *curprimquad;
   newquad = new AliZDCHit(fIshunt, track, vol, hits);
@@ -151,20 +161,23 @@ void AliZDC::AddHit(Int_t track, Int_t *vol, Float_t *hits)
   
   if(fNhits==0){
       // First hit -> setting flag for primary or secondary particle
-      Int_t primary = gAlice->GetMCApp()->GetPrimary(track);     
+      TParticle * p = gAlice->GetMCApp()->Particle(track);
+      Int_t imo = p->GetFirstMother();
       //
-      if(track != primary){
+      if(track != imo){
         newquad->SetSFlag(1);  // SECONDARY particle entering the ZDC
       }
-      else if(track == primary){
+      else if(track == imo){
         newquad->SetSFlag(0);  // PRIMARY particle entering the ZDC
-      }  
-      sFlag    = newquad->GetSFlag();
-      primKinEn = newquad->GetPrimKinEn();
-      xImpact  = newquad->GetXImpact();
-      yImpact  = newquad->GetYImpact();
-      pcPDGcode        = newquad->GetPDGCode();
-      trackTime = newquad->GetTrackTOF();
+      }
+      //  
+      sFlag     = newquad->GetSFlag();
+      primKinEn  = newquad->GetPrimKinEn();
+      xImpact   = newquad->GetXImpact();
+      yImpact   = newquad->GetYImpact();
+      pcPDGcode         = newquad->GetPDGCode();
+      motPDGcode = newquad->GetMotherPDGCode();
+      trackTime  = newquad->GetTrackTOF();
    }
    else{       
       newquad->SetPrimKinEn(primKinEn);
@@ -172,6 +185,7 @@ void AliZDC::AddHit(Int_t track, Int_t *vol, Float_t *hits)
       newquad->SetYImpact(yImpact);
       newquad->SetSFlag(sFlag);
       newquad->SetPDGCode(pcPDGcode);
+      newquad->SetMotherPDGCode(motPDGcode);
       newquad->SetTrackTOF(trackTime);
    }
  
@@ -258,7 +272,7 @@ void AliZDC::Hits2SDigits()
   // Event loop
   for(Int_t iEvent = 0; iEvent < runLoader->GetNumberOfEvents(); iEvent++) {
     Float_t pmZNC[5], pmZPC[5], pmZNA[5], pmZPA[5], pmZEM1=0., pmZEM2=0.;
-    for(Int_t i=0; i<4; i++) pmZNC[i] = pmZPC[i] =  pmZNA[i] = pmZPA[i] = 0;
+    for(Int_t i=0; i<5; i++) pmZNC[i] = pmZPC[i] =  pmZNA[i] = pmZPA[i] = 0;
 
     runLoader->GetEvent(iEvent);
     TTree* treeH = fLoader->TreeH();
@@ -400,8 +414,10 @@ void AliZDC::Hits2SDigits()
 AliDigitizer* AliZDC::CreateDigitizer(AliRunDigitizer* manager) const
 {
   // Create the digitizer for ZDC
-
-  return new AliZDCDigitizer(manager);
+  AliZDCDigitizer *zdcDigitizer = new AliZDCDigitizer(manager);
+  if(fSpectatorTracked==0) zdcDigitizer->SetSpectators2Track();
+  //printf("\n**************************ZDC digitizer created with Spectators2Track = %d\n\n", fSpectatorTracked);
+  return zdcDigitizer;
 }
 
 //_____________________________________________________________________________
@@ -596,9 +612,7 @@ void AliZDC::Digits2Raw()
       Error("Digits2Raw", "sector[0] = %d, sector[1] = %d", 
            digit.GetSector(0), digit.GetSector(1));
       continue;
-    }
-    
-    
+    }    
   }
   //
   /*
@@ -610,12 +624,14 @@ void AliZDC::Digits2Raw()
  
   // End of Block
   UInt_t lADCEndBlockGEO = lADCHeaderGEO;
-  UInt_t lADCEndBlockEvCount = gAlice->GetEventNrInRun();
+  // Event counter in ADC EOB -> getting no. of events in run from AliRunLoader
+  // get run loader
+  AliRunLoader* runLoader = fLoader->GetRunLoader(); 
+  UInt_t lADCEndBlockEvCount = runLoader->GetEventNumber();
   //  
   lADCEndBlock = lADCEndBlockGEO << 27 | 0x1 << 26 | lADCEndBlockEvCount;
   //printf("\t AliZDC::Digits2Raw -> ADCEndBlock = %d\n",lADCEndBlock);
 
-
   // open the output file
   char fileName[30];
   strcpy(fileName,AliDAQ::DdlFileName("ZDC",0));