X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ZDC%2FAliZDC.cxx;h=cb188fe943a4875644d7dc04fc2ed66b88dd4386;hb=1881bb2bf0b1d3c112cc54c8feee6fbb60fca59e;hp=fc8ed7aff85ac35ea81d7f44e8c933347650e8e1;hpb=f5c012448c1c5881b382c6fcf407e103dcad01d9;p=u%2Fmrichter%2FAliRoot.git diff --git a/ZDC/AliZDC.cxx b/ZDC/AliZDC.cxx index fc8ed7aff85..cb188fe943a 100644 --- a/ZDC/AliZDC.cxx +++ b/ZDC/AliZDC.cxx @@ -63,7 +63,8 @@ AliZDC::AliZDC() : fEnCalibData(0), fTowCalibData(0), fZDCCalibFName(""), - fSpectatorTracked(1) + fSpectatorTracked(1), + fIspASystem(kFALSE) { // // Default constructor for the Zero Degree Calorimeter base class @@ -85,7 +86,8 @@ AliZDC::AliZDC(const char *name, const char *title) : fEnCalibData(0), fTowCalibData(0), fZDCCalibFName(""), - fSpectatorTracked(1) + fSpectatorTracked(1), + fIspASystem(kFALSE) { // // Standard constructor for the Zero Degree Calorimeter base class @@ -99,10 +101,7 @@ AliZDC::AliZDC(const char *name, const char *title) : fHits = new TClonesArray("AliZDCHit",1000); gAlice->GetMCApp()->AddHitList(fHits); - char sensname[5],senstitle[25]; - sprintf(sensname,"ZDC"); - sprintf(senstitle,"ZDC dummy"); - SetName(sensname); SetTitle(senstitle); + SetName("ZDC"); SetTitle("ZDC"); } @@ -128,7 +127,8 @@ fPedCalib(ZDC.fPedCalib), fEnCalibData(ZDC.fEnCalibData), fTowCalibData(ZDC.fTowCalibData), fZDCCalibFName(ZDC.fZDCCalibFName), -fSpectatorTracked(ZDC.fSpectatorTracked) +fSpectatorTracked(ZDC.fSpectatorTracked), +fIspASystem(ZDC.fIspASystem) { // copy constructor } @@ -143,6 +143,7 @@ AliZDC& AliZDC::operator=(const AliZDC& ZDC) fEnCalibData = ZDC.fEnCalibData; fTowCalibData = ZDC.fTowCalibData; fZDCCalibFName = ZDC.fZDCCalibFName; + fIspASystem = ZDC.fIspASystem; } return *this; } @@ -237,7 +238,7 @@ void AliZDC::MakeBranch(Option_t *opt) // char branchname[10]; - sprintf(branchname,"%s",GetName()); + snprintf(branchname, 10, "%s", GetName()); const char *cH = strstr(opt,"H"); @@ -411,12 +412,12 @@ void AliZDC::Hits2SDigits() } //_____________________________________________________________________________ -AliDigitizer* AliZDC::CreateDigitizer(AliRunDigitizer* manager) const -{ +AliDigitizer* AliZDC::CreateDigitizer(AliDigitizationInput* digInput) const{ // Create the digitizer for ZDC - AliZDCDigitizer *zdcDigitizer = new AliZDCDigitizer(manager); + AliZDCDigitizer *zdcDigitizer = new AliZDCDigitizer(digInput); if(fSpectatorTracked==0) zdcDigitizer->SetSpectators2Track(); - //printf("\n**************************ZDC digitizer created with Spectators2Track = %d\n\n", fSpectatorTracked); + if(fIspASystem==kTRUE) zdcDigitizer->SetpAsystem(); + //if(fIspASystem==kTRUE) printf("\n **** ZDC digitizer initialized for p-A collisions\n\n"); return zdcDigitizer; } @@ -511,8 +512,10 @@ void AliZDC::Digits2Raw() // UInt_t lADCDataChannel = 0; + Int_t indADC0=0, indADC1=0, indADC2=0, indADC3=0; + // loop over digits - for(Int_t iDigit=0; iDigitGetEntries(); iDigit++){ + for(Int_t iDigit=0; iDigit<(Int_t) (treeD->GetEntries()); iDigit++){ treeD->GetEntry(iDigit); if(!pdigit) continue; //digit.Print(""); @@ -520,89 +523,112 @@ void AliZDC::Digits2Raw() // *** ADC data // Scan of the map to assign the correct ADC module-channel for(Int_t k=0; kknADCData1+knADCData2) break; + } + } } // Ch. debug - //printf(" det %d sec %d -> lADCDataGEO %d lADCDataChannel %d\n", - // digit.GetSector(0),digit.GetSector(1),lADCDataGEO,lADCDataChannel); + //printf("iDigit %d det %d sec %d -> lADCDataGEO %d lADCDataChannel %d\n", + // iDigit,digit.GetSector(0),digit.GetSector(1),lADCDataGEO,lADCDataChannel); if(lADCDataGEO==0){ - if(iDigit 2047) lADCDataOvFlwHG = 1; - lADCDataValue1[indHG] = digit.GetADCValue(0); - lADCData1[indHG] = lADCDataGEO << 27 | lADCDataChannel << 17 | - lADCDataOvFlwHG << 12 | (lADCDataValue1[indHG] & 0xfff); - // Low gain ADC ch. - if(digit.GetADCValue(1) > 2047) lADCDataOvFlwLG = 1; - lADCDataValue1[indLG] = digit.GetADCValue(1); - lADCData1[indLG] = lADCDataGEO << 27 | lADCDataChannel << 17 | 0x1 << 16 | - lADCDataOvFlwLG << 12 | (lADCDataValue1[indLG] & 0xfff); - // Ch. debug - //printf(" lADCDataGEO %d lADCDataValue1[%d] = %d lADCDataValue1[%d] = %d\n", - // lADCDataGEO,iDigit,lADCDataValue1[indLG],indLG,lADCDataValue1[indLG]); - } - else{ // *** Out-of-time signals - 3rd ADC module - lADCDataGEO=2; - Int_t indHG = iDigit-knADCData1-knADCData2; - Int_t indLG = indHG+knADCData3; - // High gain ADC ch. - if(digit.GetADCValue(0) > 2047) lADCDataOvFlwHG = 1; - lADCDataValue3[indHG] = digit.GetADCValue(0); - lADCData3[indHG] = lADCDataGEO << 27 | lADCDataChannel << 17 | - lADCDataOvFlwHG << 12 | (lADCDataValue3[indHG] & 0xfff); - // Low gain ADC ch. - if(digit.GetADCValue(1) > 2047) lADCDataOvFlwLG = 1; - lADCDataValue3[indLG] = digit.GetADCValue(1); - lADCData3[indLG] = lADCDataGEO << 27 | lADCDataChannel << 17 | 0x1 << 16 | - lADCDataOvFlwLG << 12 | (lADCDataValue3[indLG] & 0xfff); - //Ch. debug - //printf(" lADCDataGEO %d lADCDataValue3[%d] = %d lADCDataValue3[%d] = %d\n", - // lADCDataGEO,indHG,lADCDataValue3[indHG],indLG,lADCDataValue3[indLG]); + if(indADC0>=knADCData1){ + AliWarning(" Problem with digit index 4 ADC0\n"); + return; } + Int_t indLG = indADC0+knADCData1; + // High gain ADC ch. + if(digit.GetADCValue(0) > 2047) lADCDataOvFlwHG = 1; + lADCDataValue1[indADC0] = digit.GetADCValue(0); + lADCData1[indADC0] = lADCDataGEO << 27 | lADCDataChannel << 17 | + lADCDataOvFlwHG << 12 | (lADCDataValue1[indADC0] & 0xfff); + // Low gain ADC ch. + if(digit.GetADCValue(1) > 2047) lADCDataOvFlwLG = 1; + lADCDataValue1[indLG] = digit.GetADCValue(1); + lADCData1[indLG] = lADCDataGEO << 27 | lADCDataChannel << 17 | 0x1 << 16 | + lADCDataOvFlwLG << 12 | (lADCDataValue1[indLG] & 0xfff); + // Ch. debug + //printf(" lADCDataGEO %d ADCdataHG[%d] %d ADCdataLG[%d] %d\n", + // lADCDataGEO,indADC0,lADCDataValue1[indADC0],indLG,lADCDataValue1[indLG]); + + indADC0++; } else if(lADCDataGEO==1){ - if(iDigit 2047) lADCDataOvFlwHG = 1; - lADCDataValue2[indHG] = digit.GetADCValue(0); - lADCData2[indHG] = lADCDataGEO << 27 | lADCDataChannel << 17 | - lADCDataOvFlwHG << 12 | (lADCDataValue2[indHG] & 0xfff); - // Low gain ADC ch. - if(digit.GetADCValue(1) > 2047) lADCDataOvFlwLG = 1; - lADCDataValue2[indLG] = digit.GetADCValue(1); - lADCData2[indLG] = lADCDataGEO << 27 | lADCDataChannel << 17 | 0x1 << 16 | - lADCDataOvFlwLG << 12 | (lADCDataValue2[indLG] & 0xfff); - //Ch. debug - //printf(" lADCDataGEO %d lADCDataValue2[%d] = %d lADCDataValue2[%d] = %d\n", - // lADCDataGEO,indHG,lADCDataValue2[indHG],indLG,lADCDataValue2[indLG]); + if(indADC1>=knADCData2){ + AliWarning(" Problem with digit index 4 ADC1\n"); + return; } - else{ // *** Out-of-time signals - 4rth ADC - lADCDataGEO=3; - Int_t indHG = iDigit-knADCData1-knADCData2-knADCData3; - Int_t indLG = indHG+knADCData4; - // High gain ADC ch. - if(digit.GetADCValue(0) > 2047) lADCDataOvFlwHG = 1; - lADCDataValue4[indHG] = digit.GetADCValue(0); - lADCData4[indHG] = lADCDataGEO << 27 | lADCDataChannel << 17 | - lADCDataOvFlwHG << 12 | (lADCDataValue4[indHG] & 0xfff); - // Low gain ADC ch. - if(digit.GetADCValue(1) > 2047) lADCDataOvFlwLG = 1; - lADCDataValue4[indLG] = digit.GetADCValue(1); - lADCData4[indLG] = lADCDataGEO << 27 | lADCDataChannel << 17 | 0x1 << 16 | - lADCDataOvFlwLG << 12 | (lADCDataValue4[indLG] & 0xfff); - // Ch. debug - //printf(" lADCDataGEO %d lADCDataValue4[%d] = %d lADCDataValue4[%d] = %d\n", - // lADCDataGEO,indHG,lADCDataValue4[indHG],indLG,lADCDataValue4[indLG]); - } + Int_t indLG = indADC1+knADCData2; + // High gain ADC ch. + if(digit.GetADCValue(0) > 2047) lADCDataOvFlwHG = 1; + lADCDataValue2[indADC1] = digit.GetADCValue(0); + lADCData2[indADC1] = lADCDataGEO << 27 | lADCDataChannel << 17 | + lADCDataOvFlwHG << 12 | (lADCDataValue2[indADC1] & 0xfff); + // Low gain ADC ch. + if(digit.GetADCValue(1) > 2047) lADCDataOvFlwLG = 1; + lADCDataValue2[indLG] = digit.GetADCValue(1); + lADCData2[indLG] = lADCDataGEO << 27 | lADCDataChannel << 17 | 0x1 << 16 | + lADCDataOvFlwLG << 12 | (lADCDataValue2[indLG] & 0xfff); + // Ch. debug + //printf(" lADCDataGEO %d ADCdataHG[%d] %d ADCdataLG[%d] %d\n", + // lADCDataGEO,indADC1,lADCDataValue2[indADC1],indLG,lADCDataValue2[indLG]); + + indADC1++; + } + else if(lADCDataGEO==2){ + if(indADC2>=knADCData3){ + AliWarning(" Problem with digit index 4 ADC2\n"); + return; + } + Int_t indLG = indADC2+knADCData3; + // High gain ADC ch. + if(digit.GetADCValue(0) > 2047) lADCDataOvFlwHG = 1; + lADCDataValue3[indADC1] = digit.GetADCValue(0); + lADCData3[indADC1] = lADCDataGEO << 27 | lADCDataChannel << 17 | + lADCDataOvFlwHG << 12 | (lADCDataValue3[indADC2] & 0xfff); + // Low gain ADC ch. + if(digit.GetADCValue(1) > 2047) lADCDataOvFlwLG = 1; + lADCDataValue3[indLG] = digit.GetADCValue(1); + lADCData3[indLG] = lADCDataGEO << 27 | lADCDataChannel << 17 | 0x1 << 16 | + lADCDataOvFlwLG << 12 | (lADCDataValue3[indLG] & 0xfff); + // Ch. debug + //printf(" lADCDataGEO %d ADCdataHG[%d] %d ADCdataLG[%d] %d\n", + // lADCDataGEO,indADC2,lADCDataValue3[indADC2],indLG,lADCDataValue3[indLG]); + + indADC2++; + } + else if(lADCDataGEO==3){ + if(indADC3>=knADCData4){ + AliWarning(" Problem with digit index 4 ADC2\n"); + return; + } + Int_t indLG = indADC3+knADCData4; + // High gain ADC ch. + if(digit.GetADCValue(0) > 2047) lADCDataOvFlwHG = 1; + lADCDataValue4[indADC3] = digit.GetADCValue(0); + lADCData4[indADC3] = lADCDataGEO << 27 | lADCDataChannel << 17 | + lADCDataOvFlwHG << 12 | (lADCDataValue4[indADC3] & 0xfff); + // Low gain ADC ch. + if(digit.GetADCValue(1) > 2047) lADCDataOvFlwLG = 1; + lADCDataValue4[indLG] = digit.GetADCValue(1); + lADCData4[indLG] = lADCDataGEO << 27 | lADCDataChannel << 17 | 0x1 << 16 | + lADCDataOvFlwLG << 12 | (lADCDataValue4[indLG] & 0xfff); + // Ch. debug + //printf(" lADCDataGEO %d ADCdataHG[%d] %d ADCdataLG[%d] %d\n", + // lADCDataGEO,indADC3,lADCDataValue4[indADC3],indLG,lADCDataValue4[indLG]); + + indADC3++; } } @@ -623,10 +649,10 @@ void AliZDC::Digits2Raw() //printf("\t AliZDC::Digits2Raw -> ADCEndBlock = %d\n",lADCEndBlock); // open the output file - char fileName[30]; - strcpy(fileName,AliDAQ::DdlFileName("ZDC",0)); + TString fileName; + fileName.Form("%s",AliDAQ::DdlFileName("ZDC",0)); - AliFstream* file = new AliFstream(fileName); + AliFstream* file = new AliFstream(fileName.Data()); // write the DDL data header AliRawDataHeaderSim header; @@ -636,29 +662,29 @@ void AliZDC::Digits2Raw() sizeof(lADCHeader3) + sizeof(lADCData3) + sizeof(lADCEndBlock) + sizeof(lADCHeader4) + sizeof(lADCData4) + sizeof(lADCEndBlock); // - printf("sizeof header = %d, ADCHeader1 = %d, ADCData1 = %d, ADCEndBlock = %d\n", + /*printf("sizeof header = %d, ADCHeader1 = %d, ADCData1 = %d, ADCEndBlock = %d\n", sizeof(header),sizeof(lADCHeader1),sizeof(lADCData1),sizeof(lADCEndBlock)); printf("sizeof header = %d, ADCHeader2 = %d, ADCData2 = %d, ADCEndBlock = %d\n", sizeof(header),sizeof(lADCHeader2),sizeof(lADCData2),sizeof(lADCEndBlock)); printf("sizeof header = %d, ADCHeader3 = %d, ADCData3 = %d, ADCEndBlock = %d\n", sizeof(header),sizeof(lADCHeader1),sizeof(lADCData1),sizeof(lADCEndBlock)); printf("sizeof header = %d, ADCHeader4 = %d, ADCData4 = %d, ADCEndBlock = %d\n", - sizeof(header),sizeof(lADCHeader2),sizeof(lADCData2),sizeof(lADCEndBlock)); + sizeof(header),sizeof(lADCHeader2),sizeof(lADCData2),sizeof(lADCEndBlock));*/ header.SetAttribute(0); // valid data file->WriteBuffer((char*)(&header), sizeof(header)); // write the raw data and close the file file->WriteBuffer((char*) &lADCHeader1, sizeof (lADCHeader1)); -// file->WriteBuffer((char*) &lADCData1, sizeof(lADCData1)); + file->WriteBuffer((char*) &lADCData1, sizeof(lADCData1)); file->WriteBuffer((char*) &lADCEndBlock, sizeof(lADCEndBlock)); file->WriteBuffer((char*) &lADCHeader2, sizeof (lADCHeader2)); -// file->WriteBuffer((char*) (lADCData2), sizeof(lADCData2)); + file->WriteBuffer((char*) (lADCData2), sizeof(lADCData2)); file->WriteBuffer((char*) &lADCEndBlock, sizeof(lADCEndBlock)); file->WriteBuffer((char*) &lADCHeader3, sizeof (lADCHeader3)); -// file->WriteBuffer((char*) (lADCData3), sizeof(lADCData3)); + file->WriteBuffer((char*) (lADCData3), sizeof(lADCData3)); file->WriteBuffer((char*) &lADCEndBlock, sizeof(lADCEndBlock)); file->WriteBuffer((char*) &lADCHeader4, sizeof (lADCHeader4)); -// file->WriteBuffer((char*) (lADCData4), sizeof(lADCData4)); + file->WriteBuffer((char*) (lADCData4), sizeof(lADCData4)); file->WriteBuffer((char*) &lADCEndBlock, sizeof(lADCEndBlock)); delete file; @@ -677,52 +703,47 @@ Bool_t AliZDC::Raw2SDigits(AliRawReader* rawReader) return kFALSE; } -// // Event loop - Int_t iEvent = 0; - while(rawReader->NextEvent()){ - (AliRunLoader::Instance())->GetEvent(iEvent++); - // Create the output digit tree - TTree* treeS = loader->TreeS(); - if(!treeS){ - loader->MakeTree("S"); - treeS = loader->TreeS(); - } - // - AliZDCSDigit sdigit; - AliZDCSDigit* psdigit = &sdigit; - const Int_t kBufferSize = 4000; - treeS->Branch("ZDC", "AliZDCSDigit", &psdigit, kBufferSize); - // - AliZDCRawStream rawStream(rawReader); - Int_t sector[2], resADC, rawADC, corrADC, nPheVal; - Int_t jcount = 0; - while(rawStream.Next()){ - if(rawStream.IsADCDataWord()){ - //For the moment only in-time SDigits are foreseen (1st 48 raw values) - if(jcount < kNch){ - for(Int_t j=0; j<2; j++) sector[j] = rawStream.GetSector(j); - rawADC = rawStream.GetADCValue(); - resADC = rawStream.GetADCGain(); - //printf("\t RAw2SDigits raw%d -> RawADC[%d, %d, %d] read\n", - // jcount, sector[0], sector[1], rawADC); - // - corrADC = rawADC - Pedestal(sector[0], sector[1], resADC); - if(corrADC<0) corrADC=0; - nPheVal = ADCch2Phe(sector[0], sector[1], corrADC, resADC); - // - //printf("\t \t -> SDigit[%d, %d, %d] created\n", - // sector[0], sector[1], nPheVal); - // - new(psdigit) AliZDCSDigit(sector, (Float_t) nPheVal, 0.); - treeS->Fill(); - jcount++; - } - }//IsADCDataWord - }//rawStream.Next - // write the output tree - fLoader->WriteSDigits("OVERWRITE"); - fLoader->UnloadSDigits(); - }//Event loop + // Create the output digit tree + TTree* treeS = loader->TreeS(); + if(!treeS){ + loader->MakeTree("S"); + treeS = loader->TreeS(); + } + // + AliZDCSDigit sdigit; + AliZDCSDigit* psdigit = &sdigit; + const Int_t kBufferSize = 4000; + treeS->Branch("ZDC", "AliZDCSDigit", &psdigit, kBufferSize); + // + AliZDCRawStream rawStream(rawReader); + Int_t sector[2], resADC, rawADC, corrADC, nPheVal; + Int_t jcount = 0; + while(rawStream.Next()){ + if(rawStream.IsADCDataWord()){ + //For the moment only in-time SDigits are foreseen (1st 48 raw values) + if(jcount < kNch){ + for(Int_t j=0; j<2; j++) sector[j] = rawStream.GetSector(j); + rawADC = rawStream.GetADCValue(); + resADC = rawStream.GetADCGain(); + //printf("\t RAw2SDigits raw%d -> RawADC[%d, %d, %d] read\n", + // jcount, sector[0], sector[1], rawADC); + // + corrADC = rawADC - Pedestal(sector[0], sector[1], resADC); + if(corrADC<0) corrADC=0; + nPheVal = ADCch2Phe(sector[0], sector[1], corrADC, resADC); + // + //printf("\t \t -> SDigit[%d, %d, %d] created\n", + // sector[0], sector[1], nPheVal); + // + new(psdigit) AliZDCSDigit(sector, (Float_t) nPheVal, 0.); + treeS->Fill(); + jcount++; + } + }//IsADCDataWord + }//rawStream.Next + // write the output tree + fLoader->WriteSDigits("OVERWRITE"); + fLoader->UnloadSDigits(); return kTRUE; } @@ -735,6 +756,7 @@ Int_t AliZDC::Pedestal(Int_t Det, Int_t Quad, Int_t Res) const // Getting calibration object for ZDC set AliCDBManager *man = AliCDBManager::Instance(); AliCDBEntry *entry = man->Get("ZDC/Calib/Pedestals"); + if(!entry) AliFatal("No calibration data loaded!"); AliZDCPedestals *calibPed = (AliZDCPedestals*) entry->GetObject(); // if(!calibPed){ @@ -783,7 +805,7 @@ Int_t AliZDC::ADCch2Phe(Int_t Det, Int_t Quad, Int_t ADCVal, Int_t Res) const resADC[0] = 0.0000008; // ADC Resolution high gain: 200 fC/adcCh resADC[1] = 0.0000064; // ADC Resolution low gain: 25 fC/adcCh // - Int_t nPhe = (Int_t) (ADCVal * pmGain[Det-1][Quad] * resADC[Res]); + Int_t nPhe = (Int_t) (ADCVal / (pmGain[Det-1][Quad] * resADC[Res])); // //printf("\t AliZDC::ADCch2Phe -> det(%d, %d) - ADC %d phe %d\n",Det,Quad,ADCVal,nPhe);