]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ZDC/AliZDC.cxx
Changing madia cuts to avoid too large EM showers in the beam pipe (Andreas)
[u/mrichter/AliRoot.git] / ZDC / AliZDC.cxx
index 38c5c242f76a604f75284b534dfa83594456354f..5947f2c7f204c33c2954348fc3199cfb8fb10e75 100644 (file)
 #include "AliLoader.h"
 #include "AliRun.h"
 #include "AliMC.h"
+#include "AliLog.h"
 
  
 ClassImp(AliZDC)
 
-AliZDC *gZDC;
+AliZDC *gAliZDC;
  
 //_____________________________________________________________________________
 AliZDC::AliZDC()
@@ -67,6 +68,8 @@ AliZDC::AliZDC()
 
   fDigits     = 0;
   fNdigits    = 0;
+  
+  fCalibData  = 0;
 
 }
  
@@ -93,7 +96,9 @@ AliZDC::AliZDC(const char *name, const char *title)
   fDigits     = 0;
   fNdigits    = 0;
   
-  gZDC=this;
+  fCalibData  = 0;
+
+  gAliZDC=this;
 
 }
 //____________________________________________________________________________ 
@@ -104,7 +109,9 @@ AliZDC::~AliZDC()
   //
 
   fIshunt   = 0;
-  gZDC=0;
+  gAliZDC=0;
+
+  delete fCalibData;
 
 }
 //_____________________________________________________________________________
@@ -187,16 +194,6 @@ void AliZDC::BuildGeometry()
     fNodes->Add(node);
 }
 
-//_____________________________________________________________________________
-Int_t AliZDC::DistancetoPrimitive(Int_t , Int_t )
-{
-  //
-  // Distance from the mouse to the Zero Degree Calorimeter
-  // Dummy routine
-  //
-  return 9999;
-}
-
 //____________________________________________________________________________
 Float_t AliZDC::ZMin(void) const
 {
@@ -213,7 +210,7 @@ Float_t AliZDC::ZMax(void) const
   
 
 //_____________________________________________________________________________
-void AliZDC::MakeBranch(Option_t *opt, const char * /*file*/)
+void AliZDC::MakeBranch(Option_t *opt)
 {
   //
   // Create Tree branches for the ZDC
@@ -235,7 +232,7 @@ void AliZDC::Hits2SDigits()
 {
   // Create summable digits from hits
   
-  if (GetDebug()) printf("\n   Entering AliZDC::Hits2Digits() ");
+  AliDebug(1,"\n       Entering AliZDC::Hits2Digits() ");
   
   fLoader->LoadHits("read");
   fLoader->LoadSDigits("recreate");
@@ -343,9 +340,14 @@ void AliZDC::Digits2Raw()
 
   // preliminary format: 12 interger values (ZNC, ZNQ1-4, ZPC, ZPQ1-4, ZEM1,2)
   // For the CAEN module V965 we have an header, the Data Words and an End Of Block
-  UInt_t ADCHeader; 
-  UInt_t ADCData[24];
-  UInt_t ADCEndBlock;
+  const int knADCData1=24, knADCData2=20;
+  UInt_t lADCHeader1; 
+  UInt_t lADCData1[knADCData1];
+  //
+  UInt_t lADCHeader2; 
+  UInt_t lADCData2[knADCData2];
+  //
+  UInt_t lADCEndBlock;
 
   // load the digits
   fLoader->LoadDigits("read");
@@ -357,24 +359,34 @@ void AliZDC::Digits2Raw()
 
   // Fill data array
   // ADC header
-  UInt_t ADCHeaderGEO = 0;
-  UInt_t ADCHeaderCRATE = 0;
-  UInt_t ADCHeaderCNT = (UInt_t) treeD->GetEntries();
+  UInt_t lADCHeaderGEO = 0;
+  UInt_t lADCHeaderCRATE = 0;
+  UInt_t lADCHeaderCNT1 = knADCData1;
+  UInt_t lADCHeaderCNT2 = knADCData2;
     
-  ADCHeader = ADCHeaderGEO << 27 | 0x1 << 25 | ADCHeaderCRATE << 16 |
-              ADCHeaderCNT << 8 ;
+  lADCHeader1 = lADCHeaderGEO << 27 | 0x1 << 25 | lADCHeaderCRATE << 16 |
+               lADCHeaderCNT1 << 8 ;
+//            
+  lADCHeader2 = lADCHeaderGEO << 27 | 0x1 << 25 | lADCHeaderCRATE << 16 |
+               lADCHeaderCNT2 << 8 ;
 
-  //printf("ADCHeader = %d\n",ADCHeader);
+  //printf("lADCHeader = %d\n",lADCHeader);
       
   // ADC data word
-  UInt_t ADCDataGEO = ADCHeaderGEO;
-  UInt_t ADCDataValue[24];
-  UInt_t ADCDataOvFlw[24];
-  for(Int_t i = 0; i < 24; i++){
-    ADCDataValue[i] = 0;
-    ADCDataOvFlw[i] = 0;
+  UInt_t lADCDataGEO = lADCHeaderGEO;
+  UInt_t lADCDataValue1[knADCData1];
+  UInt_t lADCDataValue2[knADCData2];
+  UInt_t lADCDataOvFlw1[knADCData1];
+  UInt_t lADCDataOvFlw2[knADCData2];
+  for(Int_t i = 0; i<knADCData1 ; i++){
+    lADCDataValue1[i] = 0;
+    lADCDataOvFlw1[i] = 0;
   }
-  UInt_t ADCDataChannel = 0;
+  for(Int_t i = 0; i<knADCData2 ; i++){
+    lADCDataValue2[i] = 0;
+    lADCDataOvFlw2[i] = 0;
+  }
+  UInt_t lADCDataChannel = 0;
   
   // loop over digits
   for (Int_t iDigit = 0; iDigit < treeD->GetEntries(); iDigit++) {
@@ -382,41 +394,63 @@ void AliZDC::Digits2Raw()
     if (!pdigit) continue;
 
     //ADC data
-    Int_t index = 0;
-    if(digit.GetSector(0)!=3){
-      index = (digit.GetSector(0)-1) + digit.GetSector(1)*4;
-      ADCDataChannel = (digit.GetSector(0)-1)*8 + digit.GetSector(1);
+    Int_t index1 = 0, index2 = 0;
+    if(digit.GetSector(0)==1 || digit.GetSector(0)==2 || digit.GetSector(0)==3){
+      if(digit.GetSector(0)==1 || digit.GetSector(0)==2){
+        index1 = (digit.GetSector(0)-1) + digit.GetSector(1)*4;
+        lADCDataChannel = (digit.GetSector(0)-1)*8 + digit.GetSector(1);
+      }
+      else if(digit.GetSector(0)==3){
+        index1 = 19 + digit.GetSector(1);
+        lADCDataChannel = 5 + digit.GetSector(1)*8;
+      }
+      lADCDataValue1[index1] = digit.GetADCValue(0);
+      if (lADCDataValue1[index1] > 2047) lADCDataOvFlw1[index1] = 1; 
+      lADCDataValue1[index1+2] = digit.GetADCValue(1);
+      if (lADCDataValue1[index1+2] > 2047) lADCDataOvFlw1[index1+2] = 1; 
+    
+      lADCData1[index1] =   lADCDataGEO << 27 | lADCDataChannel << 17 | 
+                        lADCDataOvFlw1[index1] << 12 | (lADCDataValue1[index1] & 0xfff); 
+      lADCData1[index1+2] = lADCDataGEO << 27 | lADCDataChannel << 17 | 0x1 << 16 |
+                        lADCDataOvFlw1[index1+2] << 12 | (lADCDataValue1[index1+2] & 0xfff);                    
     }
-    else {
-      index = 19 + digit.GetSector(1);
-      ADCDataChannel = 5 + digit.GetSector(1)*8;
+    else if(digit.GetSector(0)==4 || digit.GetSector(0)==5){
+      index2 = (digit.GetSector(0)-4) + digit.GetSector(1)*4;
+      lADCDataChannel = (digit.GetSector(0)-4)*8 + digit.GetSector(1);
+
+      lADCDataValue2[index2] = digit.GetADCValue(0);
+      if (lADCDataValue2[index2] > 2047) lADCDataOvFlw2[index2] = 1; 
+      lADCDataValue2[index2+2] = digit.GetADCValue(1);
+      if (lADCDataValue2[index2+2] > 2047) lADCDataOvFlw2[index2+2] = 1; 
+      //
+      lADCData2[index2] =   lADCDataGEO << 27 | lADCDataChannel << 17 | 
+                        lADCDataOvFlw2[index2] << 12 | (lADCDataValue2[index2] & 0xfff); 
+      lADCData2[index2+2] = lADCDataGEO << 27 | lADCDataChannel << 17 | 0x1 << 16 |
+                        lADCDataOvFlw2[index2+2] << 12 | (lADCDataValue2[index2+2] & 0xfff);                    
+    } 
+    if ((index1 < 0) || (index1 >= 22)) {
+      Error("Digits2Raw", "sector[0] = %d, sector[1] = %d", 
+           digit.GetSector(0), digit.GetSector(1));
+      continue;
     }
-     
-    if ((index < 0) || (index >= 22)) {
+    if ((index2 < 0) || (index2 >= 18)) {
       Error("Digits2Raw", "sector[0] = %d, sector[1] = %d", 
            digit.GetSector(0), digit.GetSector(1));
       continue;
     }
     
-    ADCDataValue[index] = digit.GetADCValue(0);
-    if (ADCDataValue[index] > 2047) ADCDataOvFlw[index] = 1; 
-    ADCDataValue[index+2] = digit.GetADCValue(1);
-    if (ADCDataValue[index+2] > 2047) ADCDataOvFlw[index+2] = 1; 
     
-    ADCData[index] =   ADCDataGEO << 27 | ADCDataChannel << 17 | 
-                       ADCDataOvFlw[index] << 12 | (ADCDataValue[index] & 0xfff); 
-    ADCData[index+2] = ADCDataGEO << 27 | ADCDataChannel << 17 | 0x1 << 16 |
-                       ADCDataOvFlw[index+2] << 12 | (ADCDataValue[index+2] & 0xfff);                    
   }
-  //for (Int_t i=0;i<24;i++)printf("ADCData[%d] = %d\n",i,ADCData[i]);
-  
+  //for (Int_t i=0;i<24;i++)printf("ADCData1[%d] = %d\n",i,lADCData1[i]);
+  //for (Int_t i=0;i<20;i++)printf("ADCData2[%d] = %d\n",i,lADCData2[i]);
   // End of Block
-  UInt_t ADCEndBlockGEO = ADCHeaderGEO;
-  UInt_t ADCEndBlockEvCount = gAlice->GetEventNrInRun();
+  UInt_t lADCEndBlockGEO = lADCHeaderGEO;
+  UInt_t lADCEndBlockEvCount = gAlice->GetEventNrInRun();
   
-  ADCEndBlock = ADCEndBlockGEO << 27 | 0x1 << 26 | ADCEndBlockEvCount;
+  lADCEndBlock = lADCEndBlockGEO << 27 | 0x1 << 26 | lADCEndBlockEvCount;
   
-  //printf("ADCEndBlock = %d\n",ADCEndBlock);
+  //printf("ADCEndBlock = %d\n",lADCEndBlock);
 
 
   // open the output file
@@ -430,17 +464,20 @@ void AliZDC::Digits2Raw()
 
   // write the DDL data header
   AliRawDataHeader header;
-  header.fSize = sizeof(header) + sizeof(ADCHeader) + 
-                 sizeof(ADCData) + sizeof(ADCEndBlock);
+  header.fSize = sizeof(header) + sizeof(lADCHeader1) + sizeof(lADCData1) + 
+               sizeof(lADCEndBlock)+ sizeof(lADCHeader2) + sizeof(lADCData2) + sizeof(lADCEndBlock);
   //printf("sizeof header = %d, ADCHeader = %d, ADCData = %d, ADCEndBlock = %d\n",
-  //        sizeof(header),sizeof(ADCHeader),sizeof(ADCData),sizeof(ADCEndBlock));
+  //        sizeof(header),sizeof(lADCHeader),sizeof(lADCData),sizeof(lADCEndBlock));
   header.SetAttribute(0);  // valid data
   file.write((char*)(&header), sizeof(header));
 
   // write the raw data and close the file
-  file.write((char*) &ADCHeader, sizeof (ADCHeader));
-  file.write((char*)(ADCData), sizeof(ADCData));
-  file.write((char*) &ADCEndBlock, sizeof(ADCEndBlock));
+  file.write((char*) &lADCHeader1, sizeof (lADCHeader1));
+  file.write((char*)(lADCData1), sizeof(lADCData1));
+  file.write((char*) &lADCEndBlock, sizeof(lADCEndBlock));
+  file.write((char*) &lADCHeader2, sizeof (lADCHeader2));
+  file.write((char*)(lADCData2), sizeof(lADCData2));
+  file.write((char*) &lADCEndBlock, sizeof(lADCEndBlock));
   file.close();
 
   // unload the digits
@@ -478,10 +515,9 @@ void AliZDC::WriteCalibData(Int_t option)
 {
   //
   const int kCompressLevel = 9;
-  const char defname[] = "$(ALICE)/AliRoot/data/AliZDCCalib.root";
-  char* fnam = gAlice->GetZDCCalibFName();
+  char* fnam = GetZDCCalibFName();
   if (!fnam || fnam[0]=='\0') {
-    fnam = gSystem->ExpandPathName(defname);
+    fnam = gSystem->ExpandPathName("$(ALICE)/$(ALICE_LEVEL)/data/AliZDCCalib.root");
     Warning("WriteCalibData","No File Name is provided, using default %s",fnam);
   }
   TFile* cdfile = TFile::Open(fnam,"UPDATE","",kCompressLevel);
@@ -501,7 +537,7 @@ void AliZDC::WriteCalibData(Int_t option)
 void AliZDC::LoadCalibData()
 {
   //
-  char* fnam = gAlice->GetZDCCalibFName();
+  char* fnam = GetZDCCalibFName();
   if (!fnam || fnam[0]=='\0') return; 
   if (!gAlice->IsFileAccessible(fnam)) {
     Error("LoadCalibData","ZDC Calibration Data file is not accessible, %s",fnam);