]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ZDC/ZDCEMDda.cxx
Removing code viols.
[u/mrichter/AliRoot.git] / ZDC / ZDCEMDda.cxx
index 2d52c260815e2179ac8bd6dd2c532fd9475b95f9..51c5370a7359c869cf5e51d03d39640415802391 100644 (file)
@@ -1,29 +1,33 @@
 /*
 
-DAcase2.c
+This program reads the DAQ data files passed as argument using the monitoring library.
 
-This program connects to the DAQ data source passed as argument
-and populates local "./result.txt" file with the ids of events received
-during the run.
+It computes the average event size and populates local "./result.txt" file with the 
+result.
 
-The program exits when being asked to shut down (daqDA_checkshutdown)
-or End of Run event.
+The program reports about its processing progress.
 
 Messages on stdout are exported to DAQ log system.
 
+DA for ZDC standalone pedestal runs
+
 Contact: Chiara.Oppedisano@to.infn.it
-Link: /afs/cern.ch/user/c/chiarao/public/RawEMD.date
+Link: 
 Run Type: STANDALONE_EMD_RUN
-DA Type: MON
-Number of events needed: at least ~10^3
+DA Type: LDC
+Number of events needed: at least ~5*10^3
 Input Files: ZDCPedestal.dat
-Output Files: ZDCEMDCalib.dat
+Output Files: ZDCEMDCalib.dat, ZDCChMapping.dat
 Trigger Types Used: Standalone Trigger
 
 */
+#define PEDDATA_FILE  "ZDCPedestal.dat"
+#define MAPDATA_FILE  "ZDCChMapping.dat"
+#define EMDDATA_FILE  "ZDCEMDCalib.dat"
 
 #include <stdio.h>
 #include <Riostream.h>
+#include <Riostream.h>
 
 // DATE
 #include <daqDA.h>
@@ -37,9 +41,11 @@ Trigger Types Used: Standalone Trigger
 #include <TProfile.h>
 #include <TF1.h>
 #include <TFile.h>
+#include <TFitter.h>
 
 //AliRoot
 #include <AliRawReaderDate.h>
+#include <AliRawEventHeaderBase.h>
 #include <AliZDCRawStream.h>
 
 
@@ -49,6 +55,20 @@ Trigger Types Used: Standalone Trigger
 */
 int main(int argc, char **argv) {
   
+  TFitter *minuitFit = new TFitter(4);
+  TVirtualFitter::SetFitter(minuitFit);
+
+  int status = 0;
+
+  /* log start of process */
+  printf("ZDC EMD program started\n");  
+
+  /* check that we got some arguments = list of files */
+  if (argc<2) {
+    printf("Wrong number of arguments\n");
+    return -1;
+  }
+  
   //
   // --- Preparing histos for EM dissociation spectra
   //
@@ -77,14 +97,6 @@ int main(int argc, char **argv) {
      histoEMDCorr[i] = new TH1F(namhistc,namhistc,100,0.,4000.);
   }
 
-  int status;
-  
-  if (argc!=2) {
-    printf("Wrong number of arguments\n");
-    return -1;
-  }
-
-
   /* open result file */
   FILE *fp=NULL;
   fp=fopen("./result.txt","a");
@@ -93,114 +105,147 @@ int main(int argc, char **argv) {
     return -1;
   }
   
-
-  /* define data source : this is argument 1 */  
-  status = monitorSetDataSource( argv[1] );
-  if(status!=0) {
-    printf("monitorSetDataSource() failed : %s\n",monitorDecodeError(status));
+  FILE *mapFile4Shuttle;
+
+  // *** To analyze LASER events you MUST have a pedestal data file!!!
+  // *** -> check if a pedestal run has been analyzied
+  int read = 0;
+  read = daqDA_DB_getFile(PEDDATA_FILE,PEDDATA_FILE);
+  if(read){
+    printf("\t ERROR!!! ZDCPedestal.dat file NOT FOUND in DAQ db!!!\n");
     return -1;
   }
-
-
-  /* declare monitoring program */
-  status = monitorDeclareMp( __FILE__ );
-  if (status!=0) {
-    printf("monitorDeclareMp() failed : %s\n",monitorDecodeError(status));
+  else printf("\t ZDCPedestal.dat file retrieved from DAQ db\n");
+  
+  FILE *filePed = fopen(PEDDATA_FILE,"r");
+  if (filePed==NULL) {
+    printf("\t ERROR!!! Can't open ZDCPedestal.dat file!!!\n");
     return -1;
   }
 
+  // 144 = 48 in-time + 48 out-of-time + 48 correlations
+  Float_t readValues[2][144], MeanPed[44], MeanPedWidth[44], 
+       MeanPedOOT[44], MeanPedWidthOOT[44];
+  // ***************************************************
+  //   Unless we have a narrow correlation to fit we
+  //   don't fit and store in-time vs. out-of-time
+  //   histograms -> mean pedstal subtracted!!!!!!
+  // ***************************************************
+  //Float_t CorrCoeff0[44], CorrCoeff1[44];
+  //
+  for(int jj=0; jj<144; jj++){
+    for(int ii=0; ii<2; ii++){
+       fscanf(filePed,"%f",&readValues[ii][jj]);
+    }
+    if(jj<48){
+      MeanPed[jj] = readValues[0][jj];
+      MeanPedWidth[jj] = readValues[1][jj];
+      //printf("\t MeanPed[%d] = %1.1f\n",jj, MeanPed[jj]);
+    }
+    else if(jj>48 && jj<96){
+      MeanPedOOT[jj-48] = readValues[0][jj];
+      MeanPedWidthOOT[jj-48] = readValues[1][jj];
+    }
+    /*else if(jj>144){
+      CorrCoeff0[jj-96] = readValues[0][jj]; 
+      CorrCoeff1[jj-96] = readValues[1][jj];;
+    }
+    */
+  }
+
+  /* report progress */
+  daqDA_progressReport(10);
 
-  /* define wait event timeout - 1s max */
-  monitorSetNowait();
-  monitorSetNoWaitNetworkTimeout(1000);
-  
 
-  /* log start of process */
-  printf("ZDC PEDESTAL monitoring program started\n");  
-  
   /* init some counters */
   int nevents_physics=0;
   int nevents_total=0;
 
-  struct equipmentStruct *equipment;
-  int *eventEnd;
-  int *eventData;
-  int *equipmentEnd;
-  int *equipmentData;
-  int *equipmentID;
-  struct eventHeaderStruct *event;
-  eventTypeType eventT;
-  Int_t iev=0;
-  
-  /* main loop (infinite) */
-  for(;;) {
-  
-    /* check shutdown condition */
-    if (daqDA_checkShutdown()) {break;}
-    
-    /* get next event (blocking call until timeout) */
-    status=monitorGetEventDynamic((void **)&event);
-    if (status==MON_ERR_EOF) {
-      printf ("End of File detected\n");
-      break; /* end of monitoring file has been reached */
-    }
-    
+  /* read the data files */
+  int n;
+  for(n=1;n<argc;n++){
+   
+    status=monitorSetDataSource( argv[n] );
     if (status!=0) {
-      printf("monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status));
-      break;
+      printf("monitorSetDataSource() failed : %s\n",monitorDecodeError(status));
+      return -1;
     }
 
-    /* retry if got no event */
-    if (event==NULL) {
-      continue;
-    }
+    /* report progress */
+    /* in this example, indexed on the number of files */
+    daqDA_progressReport(10+80*n/argc);
 
-    iev++; 
+    /* read the file */
+    for(;;){
+      struct eventHeaderStruct *event;
+      eventTypeType eventT;
 
-    /* use event - here, just write event id to result file */
-    eventT=event->eventType;
-    
-    if(eventT==PHYSICS_EVENT){
-      //
-      // *** To analyze EMD events you MUST have a pedestal data file!!!
-      // *** -> check if a pedestal run has been analyzied
-      FILE *filePed=NULL;
-      filePed=fopen("./ZDCPedestal.dat","r");
-      if (filePed==NULL) {
-        printf("\t ERROR!!! You MUST have a ZDCPedestal.dat file!!!\n");
+      /* get next event */
+      status=monitorGetEventDynamic((void **)&event);
+      if(status==MON_ERR_EOF) break; /* end of monitoring file has been reached */
+      if(status!=0) {
+        printf("monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status));
         return -1;
       }
-      // 144 = 48 in-time + 48 out-of-time + 48 correlations
-      Float_t readValues[2][144], MeanPed[44], MeanPedWidth[44], 
-             MeanPedOOT[44], MeanPedWidthOOT[44],
-             CorrCoeff0[44], CorrCoeff1[44];
-      //
-      for(int jj=0; jj<144; jj++){
-        for(int ii=0; ii<2; ii++){
-           fscanf(filePed,"%f",&readValues[ii][jj]);
-        }
-       if(jj<48){
-         MeanPed[jj] = readValues[0][jj];
-         MeanPedWidth[jj] = readValues[1][jj];
-       }
-       else if(jj>48 && jj<96){
-         MeanPedOOT[jj-48] = readValues[0][jj];
-         MeanPedWidthOOT[jj-48] = readValues[1][jj];
-       }
-       else if(jj>144){
-         CorrCoeff0[jj-96] = readValues[0][jj]; 
-         CorrCoeff1[jj-96] = readValues[1][jj];;
-       }
+
+      /* retry if got no event */
+      if(event==NULL) {
+        break;
       }
-      //
-      //
+      
       // Initalize raw-data reading and decoding
       AliRawReader *reader = new AliRawReaderDate((void*)event);
+      reader->Select("ZDC");
+      // --- Reading event header
+      //UInt_t evtype = reader->GetType();
+      //printf("\n\t ZDCEMDda -> ev. type %d\n",evtype);
+      //printf("\t ZDCEMDda -> run # %d\n",reader->GetRunNumber());
+      //
+      AliZDCRawStream *rawStreamZDC = new AliZDCRawStream(reader);
+        
+
+      /* use event - here, just write event id to result file */
+      eventT=event->eventType;
+      
+      Int_t ich=0, adcMod[48], adcCh[48], sigCode[48], det[48], sec[48];
+      if(eventT==START_OF_DATA){
+
+       rawStreamZDC->SetSODReading(kTRUE);
+               
+       if(!rawStreamZDC->Next()) printf(" \t No raw data found!! \n");
+        else{
+         while(rawStreamZDC->Next()){
+            if(rawStreamZDC->IsChMapping()){
+             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);
+             ich++;
+           }
+         }
+       }
+       // --------------------------------------------------------
+       // --- Writing ascii data file for the Shuttle preprocessor
+        mapFile4Shuttle = fopen(MAPDATA_FILE,"w");
+        for(Int_t i=0; i<ich; i++){
+          fprintf(mapFile4Shuttle,"\t%d\t%d\t%d\t%d\t%d\t%d\n",i,
+            adcMod[i],adcCh[i],sigCode[i],det[i],sec[i]);
+          //
+          //printf("ZDCPEDESTALDA.cxx ->  ch.%d mod %d, ch %d, code %d det %d, sec %d\n",
+          //      i,adcMod[i],adcCh[i],sigCode[i],det[i],sec[i]);
+        }
+        fclose(mapFile4Shuttle);
+      }
+    
+    if(eventT==PHYSICS_EVENT){
+      // --- Reading data header
+      reader->ReadHeader();
       const AliRawDataHeader* header = reader->GetDataHeader();
       if(header){
          UChar_t message = header->GetAttributes();
         if(message & 0x70){ // DEDICATED EMD RUN
-           printf("\t STANDALONE_EMD_RUN raw data found\n");
+           //printf("\t STANDALONE_EMD_RUN raw data found\n");
            continue;
         }
         else{
@@ -208,16 +253,24 @@ int main(int argc, char **argv) {
            return -1;
         }
       }
-      //Commented until we won't have true Raw Data Header...
-      //else{
-      //   printf("\t ATTENTION! No Raw Data Header found!!!\n");
-      //   return -1;
-      //}
-      //
-      AliZDCRawStream *rawStreamZDC = new AliZDCRawStream(reader);
-      //
+      else{
+         printf("\t ATTENTION! No Raw Data Header found!!!\n");
+         return -1;
+      }
+      
+      rawStreamZDC->SetSODReading(kTRUE);
+
       if (!rawStreamZDC->Next()) printf(" \t No raw data found!! ");
       //
+      // ----- Setting ch. mapping -----
+      for(Int_t jk=0; jk<48; jk++){
+        rawStreamZDC->SetMapADCMod(jk, adcMod[jk]);
+        rawStreamZDC->SetMapADCCh(jk, adcCh[jk]);
+        rawStreamZDC->SetMapADCSig(jk, sigCode[jk]);
+        rawStreamZDC->SetMapDet(jk, det[jk]);
+        rawStreamZDC->SetMapTow(jk, sec[jk]);
+      }
+      //
       Float_t ZDCRawADC[4], ZDCCorrADC[4], ZDCCorrADCSum[4];
       for(Int_t g=0; g<4; g++){
            ZDCCorrADCSum[g] = 0.;
@@ -268,7 +321,6 @@ int main(int argc, char **argv) {
     
     nevents_total++;
 
-
     /* free resources */
     free(event);
     
@@ -277,12 +329,14 @@ int main(int argc, char **argv) {
       printf("EOR event detected\n");
       break;
     }
+
+   }
   }
-  
+    
   /* Analysis of the histograms */
   //
   FILE *fileShuttle;
-  fileShuttle = fopen("ZDCEMDCalib.dat","w");
+  fileShuttle = fopen(EMDDATA_FILE,"w");
   //
   Int_t BinMax[4];
   Float_t YMax[4];
@@ -297,33 +351,67 @@ int main(int argc, char **argv) {
      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]);
+     //printf("\n\t Mean Value from gaussian fit = %f\n", MeanFitVal[k]);
   }
   //
-   Float_t CalibCoeff[6];
-  /*for(Int_t j=0; j<6; j++){
-     if(j<4) CalibCoeff[j] = 2.76/MeanFitVal[j];
-     else  CalibCoeff[j] = 1.;
-     fprintf(fileShuttle,"\t%f\n",CalibCoeff[j]);
-  }
-  */
-  // --- For the moment we have sim data only for ZN1!!!
-  for(Int_t j=0; j<6; j++){
-     if(j==0) CalibCoeff[j] = 2.76/MeanFitVal[j];
-     else if(j>0 && j<4) CalibCoeff[j] = CalibCoeff[0];
-     else  CalibCoeff[j] = 1.;
-     fprintf(fileShuttle,"\t%f\n",CalibCoeff[j]);
+  Float_t CalibCoeff[6];     
+  Float_t icoeff[5];
+  //
+  for(Int_t j=0; j<10; j++){
+     if(j<4){
+       CalibCoeff[j] = MeanFitVal[j];
+       fprintf(fileShuttle,"\t%f\n",CalibCoeff[j]);
+     }
+     // ZEM calib. coeff. = 1
+     else if(j==4 || j==5){
+       CalibCoeff[j] = 1.; 
+       fprintf(fileShuttle,"\t%f\n",CalibCoeff[j]);
+     }
+     // Note -> For the moment the inter-calibration
+     //             coefficients are set to 1 
+     else if(j>5){
+       for(Int_t k=0; k<5; k++){  
+         icoeff[k] = 1.;
+         fprintf(fileShuttle,"\t%f",icoeff[k]);
+         if(k==4) fprintf(fileShuttle,"\n");
+       }
+     }
   }
   //                                                  
   fclose(fileShuttle);
   
+  for(Int_t ij=0; ij<4; ij++){
+    delete histoEMDRaw[ij];
+    delete histoEMDCorr[ij];
+  }
+  
+  //delete minuitFit;
+  TVirtualFitter::SetFitter(0);
 
   /* write report */
   fprintf(fp,"Run #%s, received %d physics events out of %d\n",getenv("DATE_RUN_NUMBER"),nevents_physics,nevents_total);
 
   /* close result file */
   fclose(fp);
+  
+  /* report progress */
+  daqDA_progressReport(90);
+
+  /* store the result file on FES */
+  status = daqDA_FES_storeFile(MAPDATA_FILE, MAPDATA_FILE);
+  if(status){
+    printf("Failed to export file : %d\n",status);
+    return -1;
+  }
+  //
+  status = daqDA_FES_storeFile(EMDDATA_FILE, EMDDATA_FILE);
+  if(status){
+    printf("Failed to export file : %d\n",status);
+    return -1;
+  }
 
+  /* report progress */
+  daqDA_progressReport(100);
 
   return status;
 }