#include "AliLoader.h"
#include "AliRun.h"
#include "AliMC.h"
+#include "AliLog.h"
ClassImp(AliZDC)
-AliZDC *gZDC;
+AliZDC *gAliZDC;
//_____________________________________________________________________________
AliZDC::AliZDC()
fDigits = 0;
fNdigits = 0;
+
+ fCalibData = 0;
}
fDigits = 0;
fNdigits = 0;
- gZDC=this;
+ fCalibData = 0;
+
+ gAliZDC=this;
}
//____________________________________________________________________________
//
fIshunt = 0;
- gZDC=0;
+ gAliZDC=0;
+
+ delete fCalibData;
}
//_____________________________________________________________________________
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
{
//_____________________________________________________________________________
-void AliZDC::MakeBranch(Option_t *opt, const char * /*file*/)
+void AliZDC::MakeBranch(Option_t *opt)
{
//
// Create Tree branches for the ZDC
{
// Create summable digits from hits
- if (GetDebug()) printf("\n Entering AliZDC::Hits2Digits() ");
+ AliDebug(1,"\n Entering AliZDC::Hits2Digits() ");
fLoader->LoadHits("read");
fLoader->LoadSDigits("recreate");
// 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");
// 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++) {
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
// 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
{
//
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);
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);