]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - FMD/FMDBaseda.cxx
Corrections.
[u/mrichter/AliRoot.git] / FMD / FMDBaseda.cxx
index 851ae608f9486a830a6179ad1376530b95ce5262..398634a1f180e0b666b80b9c2a07af6fd9a06dd6 100644 (file)
@@ -5,12 +5,16 @@
   Contact:                 canute@nbi.dk
   Link:                    fmd.nbi.dk/fmd/offline
   Run Type:                PHYSICS
-  DA Type:                 LDC
+  DA Type:                 MON
   Number of events needed: depending on the run, being run-level
   Input Files:             raw data 
   Output Files:            conditions.csv
   Trigger types used:      PHYSICS_EVENT
 */
+#include <Riostream.h>
+#include "monitor.h"
+#include "event.h"
+#include <AliLog.h>
 #include <TSystem.h>
 #include <TString.h>
 #include <AliFMDParameters.h>
@@ -38,34 +42,85 @@ int main(int argc, char **argv)
 #endif
   
   
-  Char_t* fileName = argv[1];
-  
+  const Char_t* tableSOD[]  = {"ALL", "no", "SOD", "all", NULL, NULL};
+
   Bool_t old = kTRUE;
-  
+  monitorDeclareTable(const_cast<char**>(tableSOD));
+
   AliFMDParameters::Instance()->Init(kFALSE,0);
-  AliFMDParameters::Instance()->UseCompleteHeader(!old);
-  
-  AliRawReader *reader = 0;
-  TString fileNam(fileName);
-  if (fileNam.EndsWith(".root")) reader = new AliRawReaderRoot(fileName);
-  else reader = new AliRawReaderDate(fileName);
-  if (!reader) { 
-    std::cerr << "Don't know how to make reader for " << fileNam 
-             << std::endl;
-    return -2;
+  AliFMDParameters::Instance()->UseCompleteHeader(old);
+  struct eventHeaderStruct *event;
+  int status;
+  /* define data source : this is argument 1 */  
+  if (argc < 2) { 
+    cout << "No monitor source set" << endl;
+    return -1;
+  }
+  status=monitorSetDataSource( argv[1] );
+  if (status!=0) {
+    printf("monitorSetDataSource() failed : %s\n",monitorDecodeError(status));
+    return -1;
   }
   
-  TStopwatch timer;
-  timer.Start();
-  AliFMDBaseDA baseDA;
-  
-  baseDA.Run(reader);
+  if (argc > 2) AliLog::SetModuleDebugLevel("FMD", atoi(argv[2]));
+  /* declare monitoring program */
+  status=monitorDeclareMp( __FILE__ );
+  if (status!=0) {
+    printf("monitorDeclareMp() failed : %s\n",monitorDecodeError(status));
+    return -1;
+  }
   
-  timer.Stop();
-  timer.Print();
+  monitorSetNowait();
+  monitorSetNoWaitNetworkTimeout(1000);
 
-  Int_t  retval = daqDA_FES_storeFile("conditions.csv", AliFMDParameters::Instance()->GetConditionsShuttleID());
-  if (retval != 0) std::cerr << "Base DA failed" << std::endl;
-  
+  AliRawReader *reader = 0;
+  AliFMDBaseDA baseDA;
+  Int_t  retval = 0;
+  Int_t iev = 0;
+  Bool_t SODread = kFALSE;
+  while(!SODread && iev<1000) {
+    
+    /* 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 */
+    }
+    
+    if (status!=0) {
+      printf("monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status));
+      break;
+    }
+    
+    /* retry if got no event */
+    if (event==NULL) {
+      continue;
+    }
+    
+    iev++; 
+    
+    switch (event->eventType){
+      
+    case START_OF_DATA:
+      reader = new AliRawReaderDate((void*)event);
+      baseDA.Run(reader);
+      SODread = kTRUE;
+      retval = 
+       daqDA_FES_storeFile("conditions.csv", 
+                           AliFMDParameters::Instance()->GetConditionsShuttleID());
+      if (retval != 0) cerr << "Base DA failed" << endl;
+      
+      break;
+    
+    default:
+      break;
+    
+    }
+  }
+   
   return retval;
 }