Reduced memory allocation
authordecaro <decaro@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 28 May 2009 17:10:05 +0000 (17:10 +0000)
committerdecaro <decaro@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 28 May 2009 17:10:05 +0000 (17:10 +0000)
TOF/TOFda.cxx
TOF/TOFnoiseda.cxx
TOF/TOFpulserda.cxx

index d381fae..5b1b155 100644 (file)
@@ -17,9 +17,12 @@ Trigger types used: PHYSICS_EVENT
 #define FILE_RUN "TOFdaRun.root"
 
 // DATE
-#include <daqDA.h>
-#include <event.h>
-#include <monitor.h>
+#include "event.h"
+#include "monitor.h"
+#include "daqDA.h"
+
+#include <stdio.h>
+#include <stdlib.h>
 
 //AliRoot
 #include <AliTOFRawStream.h>
@@ -30,6 +33,7 @@ Trigger types used: PHYSICS_EVENT
 #include <AliDAQ.h>
 #include <AliTOFHitData.h>
 #include <AliTOFHitDataBuffer.h>
+#include <AliTOFNoiseConfigHandler.h>
 
 //ROOT
 #include <TFile.h>
@@ -40,15 +44,14 @@ Trigger types used: PHYSICS_EVENT
 #include <TSystem.h>
 #include "TROOT.h"
 #include "TPluginManager.h"
-
+#include "TSAXParser.h"
 
 /* Main routine
       Arguments: 
       1- monitoring data source
 */
-
 int main(int argc, char **argv) {
-  
+
   /* magic line from Rene */
   gROOT->GetPluginManager()->AddHandler("TVirtualStreamerInfo",
                     "*",
@@ -61,18 +64,62 @@ int main(int argc, char **argv) {
   static const Int_t size = AliTOFGeometry::NPadXSector()*AliTOFGeometry::NSectors();
   static const Int_t nbins = 500;
   static const Int_t binmin = -20;
-  const Float_t c = 2.99792458E10; //speed of light
+  const Float_t c = 2.99792458E10; //speed of light [cm/s]
   TH1F::AddDirectory(0);
-  TH2S * htofPartial = new TH2S("htof","histo with delays", size,-0.5,size*1.-0.5,nbins,binmin-0.5,nbins*1.+binmin-0.5);
-  
-  // decoding the events
+  TH2S * htofPartial = new TH2S("htof","histo with delays",
+                               size,-0.5,size*1.-0.5,
+                               nbins,binmin-0.5,nbins*1.+binmin-0.5);
   
   int status;
+
+  /* log start of process */
+  printf("TOF DA started\n");  
+
+  /* check that we got some arguments = list of files */
   if (argc!=2) {
     printf("Wrong number of arguments\n");
     return -1;
   }
 
+  /* retrieve config file */
+  int getConfigFile = daqDA_DB_getFile("TOFNoiseConfig.xml","TOFNoiseConfig.xml");
+  if (getConfigFile != 0){
+    printf("Failed to retrieve config file from DB! returning...\n");
+    return -1;
+  }
+
+  AliTOFNoiseConfigHandler* tofHandler = new AliTOFNoiseConfigHandler();
+  TSAXParser *parser = new TSAXParser();
+  parser->ConnectToHandler("AliTOFNoiseConfigHandler", tofHandler);  
+  if (parser->ParseFile("./TOFNoiseConfig.xml") != 0) {
+    printf("Failed parsing config file! retunring... \n");
+    return -1;
+  }
+
+  Int_t debugFlag = tofHandler->GetDebugFlag();
+  printf("the debug flag is %i\n",debugFlag);
+
+  /* init some counters */
+  int nevents_physics=0;
+  int nevents_total=0;
+
+  Int_t iev=0;
+
+  Int_t nPDBEntriesToT = 0;
+  Int_t nDBEntriesToT = 0;
+  AliTOFHitData *HitData;
+  Int_t dummy = -1;
+  Int_t Volume[5];
+  for (Int_t i=0;i<5;i++) Volume[i]=-1;
+  AliTOFRawStream *rawStreamTOF = new AliTOFRawStream();
+  AliTOFHitDataBuffer DataBuffer;
+  AliTOFHitDataBuffer PackedDataBuffer;
+  Int_t nDBEntries = 0;
+  Int_t nPDBEntries = 0;
+  
+  struct eventHeaderStruct *event;
+  eventTypeType eventT;
+
   /* define data source : this is argument 1 */  
   status=monitorSetDataSource( argv[1] );
   if (status!=0) {
@@ -91,22 +138,11 @@ int main(int argc, char **argv) {
   monitorSetNowait();
   monitorSetNoWaitNetworkTimeout(1000);
   
-  /* log start of process */
-  printf("TOF DA started\n");  
-
-  /* init some counters */
-  int nevents_physics=0;
-  int nevents_total=0;
-
-  struct eventHeaderStruct *event;
-  eventTypeType eventT;
-  Int_t iev=0;
-
   /* main loop (infinite) */
   for(;;) {
     
     /* check shutdown condition */
-    if (daqDA_checkShutdown()) {break;}
+    if (daqDA_checkShutdown()) break;
     
     /* get next event (blocking call until timeout) */
     status=monitorGetEventDynamic((void **)&event);
@@ -121,25 +157,24 @@ int main(int argc, char **argv) {
     }
     
     /* retry if got no event */
-    if (event==NULL) {
-      continue;
-    }
+    if (event==NULL) continue;
 
     iev++; 
 
    /* use event - here, just write event id to result file */
     nevents_total++;
     eventT=event->eventType;
-    switch (event->eventType){
+    switch (event->eventType) {
       
       /* START OF RUN */
     case START_OF_RUN:
       break;
       /* END START OF RUN */
       
-    /* END OF RUN */
+      /* END OF RUN */
     case END_OF_RUN:
       break;
+      /* END END OF RUN */
       
     case PHYSICS_EVENT:
       nevents_physics++;
@@ -161,7 +196,7 @@ int main(int argc, char **argv) {
         meantime = allData[49][0];
        */
         //meantime = rawReaderT0->GetData(49,0); //OLD
-        meantime = (rawReaderT0->GetData(51,0)+rawReaderT0->GetData(52,0))/2.; //Alla
+        meantime = (Int_t)((rawReaderT0->GetData(51,0)+rawReaderT0->GetData(52,0))/2.); //Alla
        //        printf("time zero (ns) = %i (%f) \n", meantime, (meantime*24.4-200)*1E-3);   // debugging purpose
       }
       
@@ -170,39 +205,36 @@ int main(int argc, char **argv) {
       rawReader->Reset();
       
       //TOF event
-      Int_t dummy = -1;
-      Int_t Volume[5];
-      AliTOFHitData *HitData;
-      AliTOFHitDataBuffer DataBuffer;
-      AliTOFHitDataBuffer PackedDataBuffer;
-      AliTOFRawStream *rawStreamTOF = new AliTOFRawStream(rawReader);
-      //      rawReader->ReadHeader();
+      dummy = -1;
+      for (Int_t ii=0; ii<5; ii++) Volume[ii]=-1;
+      rawStreamTOF->SetRawReader(rawReader);
+      //rawReader->ReadHeader();
       rawStreamTOF->ResetBuffers();
       rawStreamTOF->DecodeDDL(0, AliDAQ::NumberOfDdls("TOF") - 1,0);
-      Int_t nPDBEntriesToT = 0;
-      Int_t nDBEntriesToT = 0;
-      for (Int_t iDDL = 0; iDDL < AliDAQ::NumberOfDdls("TOF"); iDDL++){
-       
+      nPDBEntriesToT = 0;
+      nDBEntriesToT = 0;
+      for (Int_t iDDL = 0; iDDL < AliDAQ::NumberOfDdls("TOF"); iDDL++) {
+
        /* read decoded data */
        DataBuffer = rawStreamTOF->GetDataBuffer(iDDL);
        PackedDataBuffer = rawStreamTOF->GetPackedDataBuffer(iDDL);
        
        /* get buffer entries */
-       Int_t nDBEntries = DataBuffer.GetEntries();
-       Int_t nPDBEntries = PackedDataBuffer.GetEntries();
+       nDBEntries = DataBuffer.GetEntries();
+       nPDBEntries = PackedDataBuffer.GetEntries();
        nPDBEntriesToT+=nPDBEntries;
        nDBEntriesToT+=nDBEntries;
-       
-       //for (Int_t iHit = 0; iHit < nDBEntries; iHit++){
+
+       //for (Int_t iHit = 0; iHit < nDBEntries; iHit++) {
        // HitData = DataBuffer->GetHit(iHit);
          /* store volume information */
-       //  rawStreamTOF->EquipmentId2VolumeId(HitData, Volume);
+       // rawStreamTOF->EquipmentId2VolumeId(HitData, Volume);
        //}
        /* reset buffer */
        DataBuffer.Reset();
-       
+
        /* read data buffer hits */
-       for (Int_t iHit = 0; iHit < nPDBEntries; iHit++){
+       for (Int_t iHit = 0; iHit < nPDBEntries; iHit++) {
          HitData = PackedDataBuffer.GetHit(iHit);
          /* add volume information */
          HitData->SetDDLID(iDDL);
@@ -220,29 +252,30 @@ int main(int argc, char **argv) {
            Int_t index = geom->GetIndex(Volume);
            Float_t pos[3];
            geom->GetPosPar(Volume,pos);
-           Float_t texp=TMath::Sqrt(pos[0]*pos[0]+pos[1]*pos[1]+pos[2]*pos[2])/c*1E9; //expected time in ns
-           Float_t texpBin=(texp*1E3-32)/AliTOFGeometry::TdcBinWidth(); //expected time in number of TDC bin
+           Float_t texp = TMath::Sqrt(pos[0]*pos[0]+pos[1]*pos[1]+pos[2]*pos[2])/c*1E9; //expected time in ns
+           Float_t texpBin = texp*1E3/AliTOFGeometry::TdcBinWidth(); //expected time in number of TDC bin
            Int_t deltabin = tof-TMath::Nint(texpBin);   //to be used with real data; rounding expected time to Int_t
            htofPartial->Fill(index,deltabin); //channel index start from 0, bin index from 1
            //debugging printings
-           //printf("sector %i, plate %i, strip %i, padz %i, padx %i \n",Volume[0],Volume[1],Volume[2],Volume[3],Volume[4]);
-           //printf("pos x = %f, pos y = %f, pos z = %f \n",pos[0],pos[1],pos[2]);
-           //printf ("expected time = %f (ns)\n",texp);
-           //printf ("expected time bin = %f (TDC bin)\n",texpBin);
-           //printf ("measured time bin = %i (TDC bin) with %f (ns) and ACQ bit = %i \n",tof, HitData->GetTime(), HitData->GetACQ());
-           //    printf("index = %i, deltabin = %i , filling index = %i, and bin = % i\n",index, deltabin, index, deltabin);
-           
+           //if (debugFlag) {
+           //  printf("sector %2d, plate %1d, strip %2d, padz %1d, padx %2d \n",Volume[0],Volume[1],Volume[2],Volume[3],Volume[4]); // too verbose
+           //  printf("pos x = %f, pos y = %f, pos z = %f \n",pos[0],pos[1],pos[2]); // too verbose
+           //  printf("expected time = %f (ns)\n",texp); // too verbose
+           //  printf("expected time bin = %f (TDC bin)\n",texpBin); // too verbose
+           //  printf("measured time bin = %i (TDC bin) with %f (ns) and ACQ bit = %i \n",tof, HitData->GetTime(), HitData->GetACQ()); // too verbose
+           //  printf("index = %6d, deltabin = %d , filling index = %6d, and bin = %d\n",index, deltabin, index, deltabin); // too verbose
+           //}
+
          }
          /* reset buffer */
          PackedDataBuffer.Reset();
        }
       }
-      //printf(" Packed Hit Buffer Entries = %i \n",nPDBEntriesToT);
-      //printf(" Hit Buffer Entries = %i \n",nDBEntriesToT);
-   
-      delete rawStreamTOF;
-      rawStreamTOF = 0x0;
-      
+      //if (debugFlag) {
+      //  printf(" Packed Hit Buffer Entries = %i \n",nPDBEntriesToT); // too verbose
+      //  printf(" Hit Buffer Entries = %i \n",nDBEntriesToT); // too verbose
+      //}
+
       delete rawReader;
       rawReader = 0x0;
     }
@@ -255,8 +288,12 @@ int main(int argc, char **argv) {
       printf("EOR event detected\n");
       break;
     }
+
   }
-  
+
+  delete rawStreamTOF;
+  rawStreamTOF = 0x0;
+
   delete geom;
   geom = 0x0;
 
@@ -275,7 +312,7 @@ int main(int argc, char **argv) {
     isThere=kTRUE;
     printf("%s found \n",FILE_TOTAL);
   }
-  if(isThere){
+  if (isThere) {
 
     TFile * filetot1 = new TFile (FILE_TOTAL,"READ"); 
     //look for the file
@@ -286,7 +323,7 @@ int main(int argc, char **argv) {
       //look for the histogram
       while ((key=(TKey*)next())){
        const char * namekey = key->GetName();
-       if (strcmp(namekey,"htoftot")==0){
+       if (strcmp(namekey,"htoftot")==0) {
          printf(" histo found \n");
          htoftot = (TH2S*) filetot1->Get("htoftot");
          htoftot->AddDirectory(0);
@@ -322,19 +359,16 @@ int main(int argc, char **argv) {
   htoftot = 0x0;
 
   /* write report */
-  printf("Run #%s, received %d physics events out of %d\n",getenv("DATE_RUN_NUMBER"),nevents_physics,nevents_total);
+  printf("Run #%s, received %d physics events out of %d\n",
+        getenv("DATE_RUN_NUMBER"),nevents_physics,nevents_total);
 
-  status=0;
+  status = 0;
 
   /* export file to FXS */
-  if (daqDA_FES_storeFile(FILE_RUN, "RUNLevel")) {
+  if (daqDA_FES_storeFile(FILE_RUN, "RUNLevel"))
     status=-2;
-  }
-  if (daqDA_FES_storeFile(FILE_TOTAL, "DELAYS")) {
+  if (daqDA_FES_storeFile(FILE_TOTAL, "DELAYS"))
     status=-2;
-  }
 
-  
   return status;
 }
-
index d02d3ca..35d1bed 100644 (file)
@@ -1,6 +1,6 @@
 /*
 
-TOF DA for online calibration from pulser data
+TOF DA for noise data
 
 Contact: Chiara.Zampolli@bo.infn.it
 Link: www.bo.infn.it/~zampolli
@@ -60,10 +60,11 @@ int main(int argc, char **argv) {
   static const Int_t size = AliTOFGeometry::NPadXSector()*AliTOFGeometry::NSectors();
   TH1F::AddDirectory(0);
   TH1F * htofNoise = new TH1F("hTOFnoise","histo with signals on TOF during noise", size,-0.5,size-0.5);
-  for (Int_t ibin =1;ibin<=size;ibin++){
+  for (Int_t ibin =1;ibin<=size;ibin++)
     htofNoise->SetBinContent(ibin,-1);
-  }
-  UInt_t ldcId=0;
+
+  UInt_t ldcId=99;
+  UInt_t ldcIdOLD=99;
 
   int status;
 
@@ -76,14 +77,6 @@ int main(int argc, char **argv) {
     return -1;
   }
 
-  /* open result file */
-  FILE *fp=NULL;
-  fp=fopen("./result.txt","a");
-  if (fp==NULL) {
-    printf("Failed to open file\n");
-    return -1;
-  }
-
   /* retrieve config file */
   int getConfigFile = daqDA_DB_getFile("TOFNoiseConfig.xml","TOFNoiseConfig.xml");
   if (getConfigFile != 0){
@@ -100,22 +93,19 @@ int main(int argc, char **argv) {
   }
 
   Int_t debugFlag = tofHandler->GetDebugFlag();
-
   printf("the debug flag is %i\n",debugFlag);
 
   /* init some counters */
   int nevents_physics=0;
   int nevents_total=0;
 
-
   Int_t nPDBEntriesToT = 0;
   Int_t nDBEntriesToT = 0;
-  AliTOFHitData *HitData;
+  AliTOFHitData *HitData = 0;
   Int_t dummy = -1;
   Int_t Volume[5];
   for (Int_t i=0;i<5;i++) Volume[i]=-1;
   AliTOFRawStream *rawStreamTOF = new AliTOFRawStream();
-  const AliRawDataHeader *currentCDH;
   AliTOFDecoder * decoderTOF = new AliTOFDecoder();
   AliTOFHitDataBuffer *DataBuffer[AliDAQ::NumberOfDdls("TOF")];
   AliTOFHitDataBuffer *PackedDataBuffer[AliDAQ::NumberOfDdls("TOF")];
@@ -126,6 +116,12 @@ int main(int argc, char **argv) {
   Int_t currentEquipment;
   Int_t currentDDL;
   UChar_t *data = 0x0;
+  Int_t nchDDL = 0;
+  Int_t nDBEntries = 0;
+  Int_t nPDBEntries = 0;
+
+  struct eventHeaderStruct *event;
+  eventTypeType eventT;
 
   /* read the data files */
   int n;
@@ -139,8 +135,18 @@ int main(int argc, char **argv) {
 
     /* read the file */
     for(;;) {
-      struct eventHeaderStruct *event;
-      eventTypeType eventT;
+
+      rawStreamTOF->Clear();
+      currentEquipment = 0;
+      currentDDL = 0;
+      data = 0x0;
+      nPDBEntriesToT = 0;
+      nDBEntriesToT = 0;
+      dummy = -1;
+      nchDDL = 0;
+      nDBEntries = 0;
+      nPDBEntries = 0;
+      HitData = 0;
 
       /* get next event */
       status=monitorGetEventDynamic((void **)&event);
@@ -151,9 +157,8 @@ int main(int argc, char **argv) {
       }
 
       /* retry if got no event */
-      if (event==NULL) {
+      if (event==NULL)
         break;
-      }
 
       /* use event - here, just write event id to result file */
       eventT=event->eventType;
@@ -161,17 +166,16 @@ int main(int argc, char **argv) {
       if (eventT==PHYSICS_EVENT) {
        //printf ("event %i \n", nevents_physics);
 
-       nPDBEntriesToT = 0;
-        nDBEntriesToT = 0;
-       dummy = -1;
        AliRawReader *rawReader = new AliRawReaderDate((void*)event);
        rawStreamTOF->SetRawReader(rawReader);
-       data = 0x0;
 
-       while(rawReader->ReadHeader()){
-         ldcId = rawReader->GetLDCId(); 
+       while (rawReader->ReadHeader()) {
+         ldcId = rawReader->GetLDCId();
          //debugging printings
-         //if (debugFlag) printf ("ldcId = %i \n",ldcId);
+         if (debugFlag && ldcId!=ldcIdOLD) {
+           ldcIdOLD = ldcId;
+           printf ("ldcId = %i \n",ldcId);
+         }
 
          //memory leak prevention (actually data should be always 0x0 here)
          if (data != 0x0) delete [] data;
@@ -179,51 +183,47 @@ int main(int argc, char **argv) {
          //get equipment infos
          currentEquipment = rawReader->GetEquipmentId();
          currentDDL = rawReader->GetDDLID();
-         currentCDH = rawReader->GetDataHeader();
-         Int_t nchDDL = 0;
-         if (currentDDL%2==0) {
+         const AliRawDataHeader *currentCDH = (AliRawDataHeader*)rawReader->GetDataHeader();
+         if (currentDDL%2==0)
            nchDDL = 2160;
-         }
-         else {
+         else
            nchDDL = 2208;
-         }
 
-         Int_t * array = new Int_t[nchDDL];
-  
+         //Int_t * array = new Int_t[nchDDL];
+         Int_t array[nchDDL];
          for (Int_t ii=0; ii<nchDDL; ii++) array[ii] = 0;
          decoderTOF->GetArrayDDL(array, currentDDL);
 
-         for (Int_t i=0;i<nchDDL;i++) {
+         for (Int_t i=0;i<nchDDL;i++)
            if (htofNoise->GetBinContent(array[i]+1)<0) htofNoise->SetBinContent(array[i]+1,0);
-         }
 
          //debugging printings
-         //      if (debugFlag) printf(" Equipment = %i, and DDL = %i \n", currentEquipment,currentDDL); 
+         //if (debugFlag) printf(" Equipment = %i, and DDL = %i \n", currentEquipment,currentDDL); 
          const Int_t kDataSize = rawReader->GetDataSize();
          const Int_t kDataWords = kDataSize / 4;
          data = new UChar_t[kDataSize];
          decoderTOF->SetDataBuffer(DataBuffer[currentDDL]);
          decoderTOF->SetPackedDataBuffer(PackedDataBuffer[currentDDL]);
          //start decoding
-         if (!rawReader->ReadNext(data, kDataSize)){
+         if (!rawReader->ReadNext(data, kDataSize)) {
            rawReader->AddMajorErrorLog(AliTOFRawStream::kDDLdataReading);
            printf("Error while reading DDL data. Go to next equipment \n");
            delete [] data;
            data = 0x0;
            continue;
          }
-         if (decoderTOF->Decode((UInt_t *)data, kDataWords, currentCDH) == kTRUE ) {
+         if (decoderTOF->Decode((UInt_t *)data, kDataWords, currentCDH) == kTRUE) {
            rawReader->AddMajorErrorLog(AliTOFRawStream::kDDLDecoder,Form("DDL # = %d",currentDDL));
            printf("Error while decoding DDL # %d: decoder returned with errors \n", currentDDL);
          }
-    
-         Int_t nDBEntries = DataBuffer[currentDDL]->GetEntries();
-         Int_t nPDBEntries = PackedDataBuffer[currentDDL]->GetEntries();
+
+         nDBEntries = DataBuffer[currentDDL]->GetEntries();
+         nPDBEntries = PackedDataBuffer[currentDDL]->GetEntries();
          nPDBEntriesToT+=nPDBEntries;
          nDBEntriesToT+=nDBEntries;
          /* reset buffer */
          DataBuffer[currentDDL]->Reset();
-         
+
          /* read data buffer hits */
          for (Int_t iHit = 0; iHit < nPDBEntries; iHit++){
            HitData = PackedDataBuffer[currentDDL]->GetHit(iHit);
@@ -250,26 +250,26 @@ int main(int argc, char **argv) {
                  break;
                }
              }
-             printf ("index = %i, found = %i\n",index, (Int_t)found);
+             printf ("index = %6d, found = %6d\n",index, (Int_t)found);
              */
-             //printf ("index = %i \n",index);
+             //printf ("index = %6d \n",index);
              htofNoise->Fill(index); //channel index start from 0, bin index from 1
              //debugging printings
-             // if (debugFlag) printf("sector %i, plate %i, strip %i, padz %i, padx %i \n",Volume[0],Volume[1],Volume[2],Volume[3],Volume[4]); // too verbose
+             //if (debugFlag) printf("sector %2d, plate %1d, strip %2d, padz %1d, padx %2d \n",Volume[0],Volume[1],Volume[2],Volume[3],Volume[4]); // too verbose
            }
          }
          /* reset buffer */
          PackedDataBuffer[currentDDL]->Reset();
          delete [] data;
          data = 0x0;
-         delete [] array;
+         //delete [] array;
        }
 
        //debugging printings
        //if (debugFlag) {
-       //  printf(" Packed Hit Buffer Entries = %i \n",nPDBEntriesToT);
-       //  printf(" Hit Buffer Entries = %i \n",nDBEntriesToT);
-       //      }
+       //  printf(" Packed Hit Buffer Entries = %i \n",nPDBEntriesToT); // too verbose
+       //  printf(" Hit Buffer Entries = %i \n",nDBEntriesToT); // too verbose
+       //}
 
        delete rawReader;
        rawReader = 0x0;
@@ -301,20 +301,19 @@ int main(int argc, char **argv) {
   Int_t checkedChannels = 0;
   Float_t time = nevents_physics; // acquisition time in number of events
   //debugging printings
-  if (debugFlag) printf(" Noise run lasted %f s \n",time);
+  if (debugFlag) printf(" Noise run lasted %f \n",time);
   for (Int_t ibin =1;ibin<=size;ibin++){
     Float_t cont = htofNoise->GetBinContent(ibin);
     if (cont!=-1) {
       checkedChannels++;
       //debugging printings
-      if (debugFlag) printf(" content = %f \n", cont); 
+      if (debugFlag && cont) printf(" content = %f \n", cont); 
       htofNoise->SetBinContent(ibin,cont/time);
       //debugging printings
-      if (debugFlag) printf(" scaled content = %f \n", cont/time);
-      if (cont != 0){
-       noisyChannels++;
-      }
-    } 
+      if (debugFlag && cont) printf(" scaled content = %f \n", cont/time);
+      if (cont != 0) noisyChannels++;
+
+    }
   }  
 
   if (debugFlag) {
@@ -330,18 +329,22 @@ int main(int argc, char **argv) {
   fileRun->Close();
 
   /* 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);
+  printf("Run #%s, received %d physics events out of %d\n",
+        getenv("DATE_RUN_NUMBER"),nevents_physics,nevents_total);
 
-  status =0;
+  status = 0;
 
   /* store the result file on FES */
   status=daqDA_FES_storeFile(filename,"NOISE");
-  if (status) {
+  if (status)
     status = -2;
-  }
+
+
+  delete tofHandler;
+  tofHandler = 0x0;
+
+  delete parser;
+  parser = 0x0;
 
   return status;
 }
index e19d8dc..d75ee2d 100644 (file)
@@ -1,6 +1,6 @@
 /*
 
-TOF DA for online calibration from pulser data
+TOF DA for pulser data
 
 Contact: Chiara.Zampolli@bo.infn.it
 Link: www.bo.infn.it/~zampolli
@@ -9,7 +9,7 @@ DA Type: LDC
 Number of events needed: 10000
 Input Files: TOF<nrun>.raw, where <nrun> is the run number 
 Output Files: TOFoutPulserLDC_<LDCid>.root, where <LDCid> is the id of the LDC which is read (2 characters field, e.g. TOFoutPulserLDC_03.root),to be exported to the DAQ FXS
-Trigger types used: PHYSICS_EVENT, for the time being
+Trigger types used: PHYSICS_EVENT (for the time being)
 
 */
 
@@ -30,6 +30,7 @@ Trigger types used: PHYSICS_EVENT, for the time being
 #include <AliTOFHitData.h>
 #include <AliTOFHitDataBuffer.h>
 #include <AliTOFDecoder.h>
+#include <AliTOFNoiseConfigHandler.h>
 
 //ROOT
 #include <TFile.h>
@@ -40,6 +41,7 @@ Trigger types used: PHYSICS_EVENT, for the time being
 #include <TSystem.h>
 #include "TROOT.h"
 #include "TPluginManager.h"
+#include "TSAXParser.h"
 
 /* Main routine
       Arguments: list of DATE raw data files
@@ -58,11 +60,11 @@ int main(int argc, char **argv) {
   static const Int_t size = AliTOFGeometry::NPadXSector()*AliTOFGeometry::NSectors();
   TH1F::AddDirectory(0);
   TH1I * htofPulser = new TH1I("hTOFpulser","histo with signals on TOF during pulser", size,-0.5,size-0.5);
-  for (Int_t ibin =1;ibin<=size;ibin++){
+  for (Int_t ibin =1;ibin<=size;ibin++)
     htofPulser->SetBinContent(ibin,-1);
-  }
 
-  UInt_t ldcId=0;
+  UInt_t ldcId=99;
+  UInt_t ldcIdOLD=99;
 
   int status;
 
@@ -75,18 +77,52 @@ int main(int argc, char **argv) {
     return -1;
   }
 
-  /* open result file */
-  FILE *fp=NULL;
-  fp=fopen("./result.txt","a");
-  if (fp==NULL) {
-    printf("Failed to open file\n");
+  /* retrieve config file */
+  int getConfigFile = daqDA_DB_getFile("TOFNoiseConfig.xml","TOFNoiseConfig.xml");
+  if (getConfigFile != 0){
+    printf("Failed to retrieve config file from DB! returning...\n");
     return -1;
   }
-  
+
+  AliTOFNoiseConfigHandler* tofHandler = new AliTOFNoiseConfigHandler();
+  TSAXParser *parser = new TSAXParser();
+  parser->ConnectToHandler("AliTOFNoiseConfigHandler", tofHandler);  
+  if (parser->ParseFile("./TOFNoiseConfig.xml") != 0) {
+    printf("Failed parsing config file! retunring... \n");
+    return -1;
+  }
+
+  Int_t debugFlag = tofHandler->GetDebugFlag();
+  printf("the debug flag is %i\n",debugFlag);
+
   /* init some counters */
   int nevents_physics=0;
   int nevents_total=0;
 
+  Int_t nPDBEntriesToT = 0;
+  Int_t nDBEntriesToT = 0;
+  AliTOFHitData *HitData = 0;
+  Int_t dummy = -1;
+  Int_t Volume[5];
+  for (Int_t i=0;i<5;i++) Volume[i]=-1;
+  AliTOFRawStream *rawStreamTOF = new AliTOFRawStream();
+  AliTOFDecoder * decoderTOF = new AliTOFDecoder();
+  AliTOFHitDataBuffer *DataBuffer[AliDAQ::NumberOfDdls("TOF")];
+  AliTOFHitDataBuffer *PackedDataBuffer[AliDAQ::NumberOfDdls("TOF")];
+  for (Int_t i=0;i<AliDAQ::NumberOfDdls("TOF");i++) {
+    DataBuffer[i]=new AliTOFHitDataBuffer();
+    PackedDataBuffer[i]=new AliTOFHitDataBuffer();
+  }
+  Int_t currentEquipment;
+  Int_t currentDDL;
+  UChar_t *data = 0x0;
+  Int_t nchDDL = 0;
+  Int_t nDBEntries = 0;
+  Int_t nPDBEntries = 0;
+
+  struct eventHeaderStruct *event;
+  eventTypeType eventT;
+
   /* read the data files */
   int n;
   for (n=1;n<argc;n++) {
@@ -99,8 +135,18 @@ int main(int argc, char **argv) {
 
     /* read the file */
     for(;;) {
-      struct eventHeaderStruct *event;
-      eventTypeType eventT;
+
+      rawStreamTOF->Clear();
+      currentEquipment = 0;
+      currentDDL = 0;
+      data = 0x0;
+      nPDBEntriesToT = 0;
+      nDBEntriesToT = 0;
+      dummy = -1;
+      nchDDL = 0;
+      nDBEntries = 0;
+      nPDBEntries = 0;
+      HitData = 0;
 
       /* get next event */
       status=monitorGetEventDynamic((void **)&event);
@@ -111,66 +157,55 @@ int main(int argc, char **argv) {
       }
 
       /* retry if got no event */
-      if (event==NULL) {
+      if (event==NULL)
         break;
-      }
 
       /* use event - here, just write event id to result file */
       eventT=event->eventType;
 
       if (eventT==PHYSICS_EVENT) {
        //printf ("event %i \n", nevents_physics);
-       Int_t nPDBEntriesToT = 0;
-       Int_t nDBEntriesToT = 0;
-       AliTOFHitData *HitData;
-       Int_t dummy = -1;
-       Int_t Volume[5];
+
        AliRawReader *rawReader = new AliRawReaderDate((void*)event);
-       AliTOFRawStream *rawStreamTOF = new AliTOFRawStream(rawReader);
-        const AliRawDataHeader *currentCDH;
-               AliTOFDecoder * decoderTOF = new AliTOFDecoder();
-       AliTOFHitDataBuffer *DataBuffer[72]; 
-       AliTOFHitDataBuffer *PackedDataBuffer[72];      
-       for (Int_t i=0;i<AliDAQ::NumberOfDdls("TOF");i++){
-         DataBuffer[i]=new AliTOFHitDataBuffer();
-         PackedDataBuffer[i]=new AliTOFHitDataBuffer();
-       }
-       Int_t currentEquipment;
-       Int_t currentDDL;
-       UChar_t *data = 0x0;
-       while(rawReader->ReadHeader()){
-         ldcId = rawReader->GetLDCId(); 
-         //printf ("ldcId = %i \n",ldcId);
+       rawStreamTOF->SetRawReader(rawReader);
+
+       while (rawReader->ReadHeader()) {
+         ldcId = rawReader->GetLDCId();
+         //debugging printings
+         if (debugFlag && ldcId!=ldcIdOLD) {
+           ldcIdOLD = ldcId;
+           printf ("ldcId = %i \n",ldcId);
+         }
 
          //memory leak prevention (actually data should be always 0x0 here)
-         if (data != 0x0)delete [] data;
+         if (data != 0x0) delete [] data;
          
          //get equipment infos
          currentEquipment = rawReader->GetEquipmentId();
          currentDDL = rawReader->GetDDLID();
-         currentCDH = rawReader->GetDataHeader();
-         Int_t nchDDL = 0;
-         if (currentDDL%2==0) {
+         const AliRawDataHeader *currentCDH = (AliRawDataHeader*)rawReader->GetDataHeader();
+         if (currentDDL%2==0)
            nchDDL = 2160;
-         }
-         else {
+         else
            nchDDL = 2208;
-         }
-         Int_t * array = new Int_t[nchDDL];
+
+         //Int_t * array = new Int_t[nchDDL];
+         Int_t array[nchDDL];
+         for (Int_t ii=0; ii<nchDDL; ii++) array[ii] = 0;
          decoderTOF->GetArrayDDL(array, currentDDL);
-         
-         for (Int_t i=0;i<nchDDL;i++){
+
+         for (Int_t i=0;i<nchDDL;i++)
            if (htofPulser->GetBinContent(array[i]+1)<0) htofPulser->SetBinContent(array[i]+1,0);
-         }
-         
-         //printf(" Equipment = %i, and DDL = %i \n", currentEquipment,currentDDL); 
+
+         //debugging printings
+         //if (debugFlag) printf(" Equipment = %i, and DDL = %i \n", currentEquipment,currentDDL); 
          const Int_t kDataSize = rawReader->GetDataSize();
          const Int_t kDataWords = kDataSize / 4;
          data = new UChar_t[kDataSize];
          decoderTOF->SetDataBuffer(DataBuffer[currentDDL]);
          decoderTOF->SetPackedDataBuffer(PackedDataBuffer[currentDDL]);
          //start decoding
-         if (!rawReader->ReadNext(data, kDataSize)){
+         if (!rawReader->ReadNext(data, kDataSize)) {
            rawReader->AddMajorErrorLog(AliTOFRawStream::kDDLdataReading);
            printf("Error while reading DDL data. Go to next equipment \n");
            delete [] data;
@@ -181,19 +216,20 @@ int main(int argc, char **argv) {
            rawReader->AddMajorErrorLog(AliTOFRawStream::kDDLDecoder,Form("DDL # = %d",currentDDL));
            printf("Error while decoding DDL # %d: decoder returned with errors \n", currentDDL);
          }
-         
-         Int_t nDBEntries = DataBuffer[currentDDL]->GetEntries();
-         Int_t nPDBEntries = PackedDataBuffer[currentDDL]->GetEntries();
+
+         nDBEntries = DataBuffer[currentDDL]->GetEntries();
+         nPDBEntries = PackedDataBuffer[currentDDL]->GetEntries();
          nPDBEntriesToT+=nPDBEntries;
          nDBEntriesToT+=nDBEntries;
          /* reset buffer */
          DataBuffer[currentDDL]->Reset();
-         
+
          /* read data buffer hits */
          for (Int_t iHit = 0; iHit < nPDBEntries; iHit++){
            HitData = PackedDataBuffer[currentDDL]->GetHit(iHit);
            /* add volume information */
            HitData->SetDDLID(currentDDL);
+           for (Int_t i=0;i<5;i++) Volume[i]=-1;
            rawStreamTOF->EquipmentId2VolumeId(HitData, Volume);
            if (Volume[0]==-1 ||
                Volume[1]==-1 ||
@@ -205,32 +241,35 @@ int main(int argc, char **argv) {
              Volume[3] = Volume[4];
              Volume[4] = dummy;
              Int_t index = geom->GetIndex(Volume);
-             //printf ("index = %i \n",index);
+             // to check array indexes
+             /*
+             Bool_t found =kFALSE;
+             for (Int_t j=0;j<nchDDL;j++){
+               if (index==array[j]) {
+                 found = kTRUE;
+                 break;
+               }
+             }
+             printf ("index = %6d, found = %6d\n",index, (Int_t)found);
+             */
+             //printf ("index = %6d \n",index);
              htofPulser->Fill(index); //channel index start from 0, bin index from 1
              //debugging printings
-             //printf("sector %i, plate %i, strip %i, padz %i, padx %i \n",Volume[0],Volume[1],Volume[2],Volume[3],Volume[4]);
+             //if (debugFlag) printf("sector %2d, plate %1d, strip %2d, padz %1d, padx %2d \n",Volume[0],Volume[1],Volume[2],Volume[3],Volume[4]); // too verbose
            }
          }
          /* reset buffer */
          PackedDataBuffer[currentDDL]->Reset();
          delete [] data;
          data = 0x0;
-         delete [] array;
-       }
-       
-       //printf(" Packed Hit Buffer Entries = %i \n",nPDBEntriesToT);
-       //printf(" Hit Buffer Entries = %i \n",nDBEntriesToT);
-       
-       delete decoderTOF;
-       decoderTOF=0x0;
-
-       for (Int_t i=0;i<72;i++){ 
-         delete DataBuffer[i];
-         delete PackedDataBuffer[i];
+         //delete [] array;
        }
-       
-       delete rawStreamTOF;
-       rawStreamTOF = 0x0;
+
+       //debugging printings
+       //if (debugFlag) {
+       //  printf(" Packed Hit Buffer Entries = %i \n",nPDBEntriesToT); // too verbose
+       //  printf(" Hit Buffer Entries = %i \n",nDBEntriesToT); // too verbose
+       //}
 
        delete rawReader;
        rawReader = 0x0;
@@ -241,9 +280,20 @@ int main(int argc, char **argv) {
       /* free resources */
       free(event);
     }
-    
+
+  }
+
+  delete decoderTOF;
+  decoderTOF=0x0;
+
+  for (Int_t i=0;i<AliDAQ::NumberOfDdls("TOF");i++){ 
+    delete DataBuffer[i];
+    delete PackedDataBuffer[i];
   }
 
+  delete rawStreamTOF;
+  rawStreamTOF = 0x0;
+
   delete geom;
   geom = 0x0;
 
@@ -253,18 +303,17 @@ int main(int argc, char **argv) {
   TFile * fileRun = new TFile (filename,"RECREATE"); 
   htofPulser->Write();
   fileRun->Close();
-  
+
   /* write report */
-  fprintf(fp,"Run #%s, received %d physics events out of %d\n",getenv("DATE_RUN_NUMBER"),nevents_physics,nevents_total);
+  printf("Run #%s, received %d physics events out of %d\n",
+        getenv("DATE_RUN_NUMBER"),nevents_physics,nevents_total);
+
+  status = 0;
 
-  /* close result file */
-  fclose(fp);
-  
   /* store the result file on FES */
   status=daqDA_FES_storeFile(filename,"PULSER");
-  if (status) {
+  if (status)
     status = -2;
-  }
 
   return status;
 }