X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=blobdiff_plain;f=ZDC%2FZDCEMDda.cxx;h=b80a053ae70304793317da316658740ec6fbc894;hp=9d92b4622c53cbd715969587572dd6a80a43ea98;hb=966243853647e5c182dc4d520ab71da0ae9ac565;hpb=a5747d8f64e80219fb594de3daeb43c3e39b0eba diff --git a/ZDC/ZDCEMDda.cxx b/ZDC/ZDCEMDda.cxx index 9d92b4622c5..b80a053ae70 100644 --- a/ZDC/ZDCEMDda.cxx +++ b/ZDC/ZDCEMDda.cxx @@ -2,9 +2,6 @@ This program reads the DAQ data files passed as argument using the monitoring library. -It computes the average event size and populates local "./result.txt" file with the -result. - The program reports about its processing progress. Messages on stdout are exported to DAQ log system. @@ -13,7 +10,7 @@ DA for ZDC standalone CALIBRATION_EMD runs Contact: Chiara.Oppedisano@to.infn.it Link: -Run Type: STANDALONE_EMD_RUN +Run Type: CALIBRATION_EMD_RUN DA Type: LDC Number of events needed: at least ~5*10^3 Input Files: ZDCPedestal.dat @@ -39,8 +36,6 @@ Trigger Types Used: Standalone Trigger #include #include #include -#include -#include #include #include #include @@ -58,7 +53,6 @@ Trigger Types Used: Standalone Trigger */ int main(int argc, char **argv) { - gROOT->GetPluginManager()->AddHandler("TVirtualStreamerInfo", "*", "TStreamerInfo", @@ -71,9 +65,37 @@ int main(int argc, char **argv) { TVirtualFitter::SetDefaultFitter("Minuit"); int status = 0; - // No. of ZDC cabled ch. + int const kNModules = 10; int const kNChannels = 24; int const kNScChannels = 32; + Int_t kFirstADCGeo=0, kLastADCGeo=1; // NO out-of-time signals!!! + + Int_t iMod=-1; + Int_t modGeo[kNModules], modType[kNModules],modNCh[kNModules]; + for(Int_t kl=0; kl check if a pedestal run has been analyzed @@ -157,8 +167,8 @@ int main(int argc, char **argv) { } // 144 = 48 in-time + 48 out-of-time + 48 correlations - Float_t readValues[2][3*2*kNChannels]; - Float_t MeanPed[2*kNChannels]; + Float_t readValues[2][6*kNChannels]; + Float_t MeanPedhg[kNChannels], MeanPedlg[kNChannels]; Float_t CorrCoeff0[2*kNChannels], CorrCoeff1[2*kNChannels]; // *************************************************** // Unless we have a narrow correlation to fit we @@ -170,18 +180,24 @@ int main(int argc, char **argv) { for(int ii=0; ii<2; ii++){ fscanf(filePed,"%f",&readValues[ii][jj]); } - if(jj2*kNChannels && jj>4*kNChannels){ + else if(jj>=kNChannels && jj<2*kNChannels){ + MeanPedlg[jj-kNChannels] = readValues[0][jj]; + //printf("\t MeanPedlg[%d] = %1.1f\n",jj-kNChannels, MeanPedlg[jj-kNChannels]); + } + else if(jj>4*kNChannels){ CorrCoeff0[jj-4*kNChannels] = readValues[0][jj]; CorrCoeff1[jj-4*kNChannels] = readValues[1][jj];; } } + + FILE *mapFile4Shuttle; /* report progress */ - daqDA_progressReport(10); + daqDA_progressReport(20); /* init some counters */ @@ -203,7 +219,7 @@ int main(int argc, char **argv) { /* report progress */ /* in this example, indexed on the number of files */ - daqDA_progressReport(10+80*n/argc); + daqDA_progressReport(20+70*n/argc); /* read the file */ for(;;){ @@ -235,24 +251,10 @@ int main(int argc, char **argv) { /* use event - here, just write event id to result file */ eventT=event->eventType; - Int_t ich=0; - Int_t adcMod[2*kNChannels], adcCh[2*kNChannels], sigCode[2*kNChannels]; - Int_t det[2*kNChannels], sec[2*kNChannels]; - for(Int_t y=0; y<2*kNChannels; y++){ - adcMod[y]=adcCh[y]=sigCode[y]=det[y]=sec[y]=0; - } - - Int_t iScCh=0; - Int_t scMod[kNScChannels], scCh[kNScChannels], scSigCode[kNScChannels]; - Int_t scDet[kNScChannels], scSec[kNScChannels]; - for(Int_t y=0; ySetSODReading(kTRUE); // -------------------------------------------------------- @@ -262,59 +264,79 @@ int main(int argc, char **argv) { else{ while((rawStreamZDC->Next())){ if(rawStreamZDC->IsHeaderMapping()){ // mapping header - modNum = rawStreamZDC->GetADCModule(); - modType = rawStreamZDC->GetModType(); + iMod++; + modGeo[iMod] = rawStreamZDC->GetADCModule(); + modType[iMod] = rawStreamZDC->GetModType(); + modNCh[iMod] = rawStreamZDC->GetADCNChannels(); } if(rawStreamZDC->IsChMapping()){ - if(modType==1){ // ADC mapping ---------------------- + if(modType[iMod]==1){ // ADC mapping ---------------------- adcMod[ich] = rawStreamZDC->GetADCModFromMap(ich); adcCh[ich] = rawStreamZDC->GetADCChFromMap(ich); sigCode[ich] = rawStreamZDC->GetADCSignFromMap(ich); det[ich] = rawStreamZDC->GetDetectorFromMap(ich); sec[ich] = rawStreamZDC->GetTowerFromMap(ich); - // - fprintf(mapFile4Shuttle,"\t%d\t%d\t%d\t%d\t%d\t%d\n", - ich,adcMod[ich],adcCh[ich],sigCode[ich],det[ich],sec[ich]); - // - //printf(" Mapping in DA -> %d ADC: mod %d ch %d, code %d det %d, sec %d\n", - // ich,adcMod[ich],adcCh[ich],sigCode[ich],det[ich],sec[ich]); - // ich++; } - else if(modType==2){ //VME scaler mapping -------------------- + else if(modType[iMod]==2){ //VME scaler mapping -------------------- scMod[iScCh] = rawStreamZDC->GetScalerModFromMap(iScCh); scCh[iScCh] = rawStreamZDC->GetScalerChFromMap(iScCh); scSigCode[iScCh] = rawStreamZDC->GetScalerSignFromMap(iScCh); scDet[iScCh] = rawStreamZDC->GetScDetectorFromMap(iScCh); - scSec[iScCh] = rawStreamZDC->GetScTowerFromMap(iScCh); - // - fprintf(mapFile4Shuttle,"\t%d\t%d\t%d\t%d\t%d\t%d\n", - iScCh,scMod[iScCh],scCh[iScCh],scSigCode[iScCh],scDet[iScCh],scSec[iScCh]); - // - //printf(" Mapping in DA -> %d Scaler: mod %d ch %d, code %d det %d, sec %d\n", - // iScCh,scMod[iScCh],scCh[iScCh],scSigCode[iScCh],scDet[iScCh],scSec[iScCh]); - // + scSec[iScCh] = rawStreamZDC->GetScTowerFromMap(iScCh); iScCh++; } + else if(modType[iMod]==6 && modGeo[iMod]==4){ // ZDC TDC mapping -------------------- + tdcMod[itdcCh] = rawStreamZDC->GetTDCModFromMap(itdcCh); + tdcCh[itdcCh] = rawStreamZDC->GetTDCChFromMap(itdcCh); + tdcSigCode[itdcCh] = rawStreamZDC->GetTDCSignFromMap(itdcCh); + itdcCh++; + } } + } + // Writing data on output FXS file + for(Int_t is=0; is<2*kNChannels; is++){ + fprintf(mapFile4Shuttle,"\t%d\t%d\t%d\t%d\t%d\t%d\n", + is,adcMod[is],adcCh[is],sigCode[is],det[is],sec[is]); + //printf(" EMD DA -> %d ADC: mod %d ch %d, code %d det %d, sec %d\n", + // is,adcMod[is],adcCh[is],sigCode[is],det[is],sec[is]); } + for(Int_t is=0; is %d Scaler: mod %d ch %d, code %d det %d, sec %d\n", + // is,scMod[is],scCh[is],scSigCode[is],scDet[is],scSec[is]); + } + for(Int_t is=0; is %d TDC: mod %d ch %d, code %d\n", + // is,tdcMod[is],tdcCh[is],tdcSigCode[is]); + } + for(Int_t is=0; is Module mapping: geo %d type %d #ch %d\n", + // modGeo[is],modType[is],modNCh[is]); + } + } fclose(mapFile4Shuttle); }// SOD event - if(eventT==PHYSICS_EVENT){ + else if(eventT==PHYSICS_EVENT){ // --- Reading data header reader->ReadHeader(); const AliRawDataHeader* header = reader->GetDataHeader(); if(header){ UChar_t message = header->GetAttributes(); if((message & 0x70) == 0x70){ // DEDICATED EMD RUN - //printf("\t STANDALONE_EMD_RUN raw data found\n"); - continue; + //printf("\t CALIBRATION_EMD_RUN raw data found\n"); } else{ - printf("\t NO STANDALONE_EMD_RUN raw data found\n"); - return -1; + // Temporary commented to validate DA with simulated data!!! + //printf("\t NO CALIBRATION_EMD_RUN raw data found\n"); + //return -1; } } else{ @@ -335,86 +357,101 @@ int main(int argc, char **argv) { rawStreamZDC->SetMapTow(jk, sec[jk]); } // - Float_t ZDCRawADC[4], ZDCCorrADC[4], ZDCCorrADCSum[4]; + Float_t ZDCCorrADC[4], ZDCCorrADCSum[4]; for(Int_t g=0; g<4; g++){ ZDCCorrADCSum[g] = 0.; - ZDCRawADC[g] = 0.; + ZDCCorrADC[g] = 0.; } + // while(rawStreamZDC->Next()){ - Int_t det = rawStreamZDC->GetSector(0); + Int_t detID = rawStreamZDC->GetSector(0); Int_t quad = rawStreamZDC->GetSector(1); - - if(rawStreamZDC->IsADCDataWord() && !(rawStreamZDC->IsUnderflow()) - && !(rawStreamZDC->IsOverflow()) && det!=-1 - && (rawStreamZDC->GetADCGain() == 1)){ // Selecting LOW RES ch.s - - //printf(" IsADCWord %d, IsUnderflow %d, IsOverflow %d\n", - // rawStreamZDC->IsADCDataWord(),rawStreamZDC->IsUnderflow(),rawStreamZDC->IsOverflow()); + + if((rawStreamZDC->IsADCDataWord()) && !(rawStreamZDC->IsUnderflow()) + && !(rawStreamZDC->IsOverflow()) && (detID!=-1) && (detID!=3) + && (rawStreamZDC->GetADCGain() == 1) && // Selecting LOW RES ch.s + (rawStreamZDC->GetADCModule()>=kFirstADCGeo && rawStreamZDC->GetADCModule()<=kLastADCGeo)){ // Taking LOW RES channels -> ch.+kNChannels !!!! Int_t DetIndex=999, PedIndex=999; - // Not ZEM not PMRef && low gain chain - if((det!=3) && (quad!=5) && (rawStreamZDC->GetADCGain()==1)){ - if(det == 1){ - DetIndex = det-1; - PedIndex = quad+kNChannels; + // Not PMRef + if(quad!=5){ + if(detID == 1){ + DetIndex = detID-1; + PedIndex = quad; } - else if(det==2){ - DetIndex = det-1; - PedIndex = quad+5+kNChannels; + else if(detID == 2){ + DetIndex = detID-1; + PedIndex = quad+5; } - else if(det == 4){ - DetIndex = det-2; - PedIndex = quad+12+kNChannels; + else if(detID == 4){ + DetIndex = detID-2; + PedIndex = quad+12; } - else if(det == 5){ - DetIndex = det-2; - PedIndex = quad+17+kNChannels; + else if(detID == 5){ + DetIndex = detID-2; + PedIndex = quad+17; } // Mean pedestal subtraction - Float_t Pedestal = MeanPed[PedIndex]; + Float_t Pedestal = MeanPedlg[PedIndex]; // Pedestal subtraction from correlation with out-of-time signals //Float_t Pedestal = CorrCoeff0[PedIndex]+CorrCoeff1[PedIndex]*MeanPedOOT[PedIndex]; - // + + // Run 2010 -> we decide to fit only PMCs +/* if(DetIndex!=999 || PedIndex!=999){ + if(quad==0){ + Float_t corrADCval = (rawStreamZDC->GetADCValue()) - Pedestal; + if(detID==1 || detID==2) histoEMDCorr[detID-1]->Fill(corrADCval); + else if(detID==4 || detID==5) histoEMDCorr[detID-2]->Fill(corrADCval); + } + } +*/ if(DetIndex!=999 || PedIndex!=999){ - // - ZDCRawADC[DetIndex] += (Float_t) rawStreamZDC->GetADCValue(); - // // ZDCCorrADC[DetIndex] = (rawStreamZDC->GetADCValue()) - Pedestal; ZDCCorrADCSum[DetIndex] += ZDCCorrADC[DetIndex]; // - /*printf("\t det %d quad %d res %d pedInd %d detInd %d:" - "ADCCorr = %d, ZDCCorrADCSum = %d\n", - det,quad,rawStreamZDC->GetADCGain(),PedIndex,DetIndex, + /*printf("\t det %d quad %d res %d pedInd %d " + "Pedestal %1.0f -> ADCCorr = %d ZDCCorrADCSum = %d\n", + detID,quad,rawStreamZDC->GetADCGain(),PedIndex,Pedestal, (Int_t) ZDCCorrADC[DetIndex],(Int_t) ZDCCorrADCSum[DetIndex]); - */ + */ } - // Not common nor ref. PM && low gain chain - if((quad!=0) && (rawStreamZDC->GetADCGain()==1)){ + // Not common PM + /*if(quad!=0){ Float_t corrADCval = (rawStreamZDC->GetADCValue()) - Pedestal; - if(det==1) histZNCtow[quad]->Fill(corrADCval); - else if(det==2) histZPCtow[quad]->Fill(corrADCval); - else if(det==4) histZNAtow[quad]->Fill(corrADCval); - else if(det==5) histZPAtow[quad]->Fill(corrADCval); - } + if(detID==1) histZNCtow[quad-1]->Fill(corrADCval); + else if(detID==2) histZPCtow[quad-1]->Fill(corrADCval); + else if(detID==4) histZNAtow[quad-1]->Fill(corrADCval); + else if(detID==5) histZPAtow[quad-1]->Fill(corrADCval); + // + //printf("\t det %d tow %d fill histo w. value %1.0f\n", + // detID,quad,corrADCval); + }*/ if(DetIndex==999 || PedIndex==999) - printf(" WARNING! Detector a/o pedestal index are WRONG!!!\n"); + printf(" WARNING! Detector a/o pedestal index are WRONG!!!\n"); - } + }//quad!=5 }//IsADCDataWord() } // nevents_physics++; // - for(Int_t j=0; j<4; j++){ - histoEMDRaw[j]->Fill(ZDCRawADC[j]); - histoEMDCorr[j]->Fill(ZDCCorrADCSum[j]); - } + delete reader; + delete rawStreamZDC; + // + for(Int_t j=0; j<4; j++) histoEMDCorr[j]->Fill(ZDCCorrADCSum[j]); + }//(if PHYSICS_EVENT) + + /* exit when last event received, no need to wait for TERM signal */ + else if(eventT==END_OF_RUN) { + printf(" -> EOR event detected\n"); + break; + } nevents_total++; @@ -428,28 +465,31 @@ int main(int argc, char **argv) { // FILE *fileShuttle1 = fopen(ENCALIBDATA_FILE,"w"); // - Int_t BinMax[4]; - Float_t YMax[4]; - Int_t NBinsx[4]; - Float_t MeanFitVal[4]; + Int_t BinMax[4]={0,0,0,0}; + Float_t YMax[4]={0.,0.,0.,0.}; + Int_t NBinsx[4]={0,0,0,0}; + Float_t MeanFitVal[4]={1.,1.,1.,1.}; TF1 *fitfun[4]; for(Int_t k=0; k<4; k++){ - if(histoEMDCorr[k]->GetEntries() == 0){ - printf("\n WARNING! Empty histos -> ending DA WITHOUT writing output\n\n"); - return -1; - } - BinMax[k] = histoEMDCorr[k]->GetMaximumBin(); - YMax[k] = (histoEMDCorr[k]->GetXaxis())->GetXmax(); - NBinsx[k] = (histoEMDCorr[k]->GetXaxis())->GetNbins(); -// printf("\n\t Det%d -> BinMax = %d, ChXMax = %f\n", k+1, BinMax[k], BinMax[k]*YMax[k]/NBinsx[k]); - histoEMDCorr[k]->Fit("gaus","Q","",BinMax[k]*YMax[k]/NBinsx[k]*0.7,BinMax[k]*YMax[k]/NBinsx[k]*1.25); - fitfun[k] = histoEMDCorr[k]->GetFunction("gaus"); - MeanFitVal[k] = (Float_t) (fitfun[k]->GetParameter(1)); - //printf("\n\t Mean Value from gaussian fit = %f\n", MeanFitVal[k]); + if(histoEMDCorr[k]->GetEntries()!=0 && histoEMDCorr[k]->GetMean()>0){ + BinMax[k] = histoEMDCorr[k]->GetMaximumBin(); + //printf("\n\t histoEMDCorr[%d]: BinMax = %d", k, BinMax[k]); + if(BinMax[k]<=1){ + printf("\n WARNING! Something wrong with det %d histo -> calibration coeff. set to 1\n\n", k); + continue; + } + // + YMax[k] = (histoEMDCorr[k]->GetXaxis())->GetXmax(); + NBinsx[k] = (histoEMDCorr[k]->GetXaxis())->GetNbins(); + //printf(" ChXMax = %f\n", BinMax[k]*YMax[k]/NBinsx[k]); + histoEMDCorr[k]->Fit("gaus","Q","",BinMax[k]*YMax[k]/NBinsx[k]*0.7,BinMax[k]*YMax[k]/NBinsx[k]*1.25); + fitfun[k] = histoEMDCorr[k]->GetFunction("gaus"); + MeanFitVal[k] = (Float_t) (fitfun[k]->GetParameter(1)); + //printf("\t Mean Value from gaussian fit = %f\n", MeanFitVal[k]); + } } // Float_t CalibCoeff[6]; - //Float_t icoeff[5]; // for(Int_t j=0; j<6; j++){ if(j<4){ @@ -465,25 +505,26 @@ int main(int argc, char **argv) { fclose(fileShuttle1); FILE *fileShuttle2 = fopen(TOWCALIBDATA_FILE,"w"); - Float_t meanvalznc[4], meanvalzpc[4], meanvalzna[4], meanvalzpa[4]; + //Float_t meanvalznc[4], meanvalzpc[4], meanvalzna[4], meanvalzpa[4]; for(Int_t j=0; j<4; j++){ - if(histZNCtow[j]->GetEntries() == 0){ + /*if(histZNCtow[j]->GetEntries() == 0){ printf("\n WARNING! Empty histos -> ending DA WITHOUT writing output\n\n"); return -1; } meanvalznc[j] = histZNCtow[j]->GetMean(); meanvalzpc[j] = histZPCtow[j]->GetMean(); meanvalzna[j] = histZNAtow[j]->GetMean(); - meanvalzpa[j] = histZPAtow[j]->GetMean(); + meanvalzpa[j] = histZPAtow[j]->GetMean();*/ // Note -> For the moment the inter-calibration coeff. are set to 1 - /*for(Int_t k=0; k<4; k++){ - icoeff[k] = 1.; - fprintf(fileShuttle2,"\t%f",icoeff[k]); - if(k==4) fprintf(fileShuttle2,"\n"); - }*/ + for(Int_t k=0; k<5; k++){ + Float_t icoeff = 1.; + fprintf(fileShuttle2,"\t%f",icoeff); + if(k==5) fprintf(fileShuttle2,"\n"); + } } - if(meanvalznc[1]!=0 && meanvalznc[2]!=0 && meanvalznc[3]!=0 && + // + /*if(meanvalznc[1]!=0 && meanvalznc[2]!=0 && meanvalznc[3]!=0 && meanvalzpc[1]!=0 && meanvalzpc[2]!=0 && meanvalzpc[3]!=0 && meanvalzna[1]!=0 && meanvalzna[2]!=0 && meanvalzna[3]!=0 && meanvalzpa[1]!=0 && meanvalzpa[2]!=0 && meanvalzpa[3]!=0){ @@ -499,11 +540,10 @@ int main(int argc, char **argv) { else{ printf("\n Tower intercalib. coeff. CAN'T be calculated (some mean values are ZERO)!!!\n\n"); return -1; - } + }*/ fclose(fileShuttle2); for(Int_t ij=0; ij<4; ij++){ - delete histoEMDRaw[ij]; delete histoEMDCorr[ij]; }