* Updated HOMERManager for AMORE functionality
authorjthaeder <jthaeder@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 6 Aug 2009 21:43:53 +0000 (21:43 +0000)
committerjthaeder <jthaeder@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 6 Aug 2009 21:43:53 +0000 (21:43 +0000)
* BugFixes for SourceName / BlockName
* Better testmacro

HLT/BASE/AliHLTHOMERBlockDesc.cxx
HLT/BASE/AliHLTHOMERManager.cxx
HLT/BASE/AliHLTHOMERManager.h
HLT/BASE/AliHLTHOMERProxyHandler.cxx
HLT/BASE/AliHLTHOMERSourceDesc.cxx
HLT/exa/HOMERManager.C

index 293f612..449babe 100644 (file)
@@ -33,6 +33,8 @@
 
 #include "AliHLTMessage.h"
 
+#include "AliLog.h"
+
 #include "TMath.h"
 #include "TClass.h"
 
@@ -96,7 +98,7 @@ void AliHLTHOMERBlockDesc::SetBlock( void * data, ULong_t size, TString origin,
   fDataType = dataType;
   fSpecification = specification; 
 
-  fBlockName.Form("%s_%s%_%ul", fDetector.Data(), fDataType.Data(), fSpecification ); 
+  fBlockName.Form("%s_%s%_%lu", fDetector.Data(), fDataType.Data(), fSpecification ); 
 
   // -- Set block parameters
   SetBlockParameters();
@@ -195,12 +197,10 @@ void AliHLTHOMERBlockDesc::SetBlockParameters() {
   }
   
   // -- Check if classname has been defined
-  /*
-    if ( iResult < 0 ) {
-    HLTWarning( "The classname for data type %s for the detector %s has not been defined yet.", 
-    fDataType.Data(), fDetector.Data());
-    }
-  */
+  if ( iResult < 0 ) {
+    AliWarning( Form("The classname for data type %s for the detector %s has not been defined yet.", 
+                    fDataType.Data(), fDetector.Data()) );
+  }
   return;
 }
   
index ba804b1..f933c2a 100644 (file)
@@ -168,7 +168,7 @@ void AliHLTHOMERManager::SetSourceState( AliHLTHOMERSourceDesc * source, Bool_t
  */
 
 //##################################################################################
-Int_t AliHLTHOMERManager::ConnectHOMER(){
+Int_t AliHLTHOMERManager::ConnectHOMER( TString detector="" ){
   // see header file for class documentation
 
   Int_t iResult = 0;
@@ -188,7 +188,7 @@ Int_t AliHLTHOMERManager::ConnectHOMER(){
   const char ** sourceHostnames = new const char* [fSourceList->GetEntries()];
   UInt_t sourceCount = 0;
 
-  CreateReadoutList( sourceHostnames, sourcePorts, sourceCount );
+  CreateReadoutList( sourceHostnames, sourcePorts, sourceCount, detector );
   if ( sourceCount == 0 ) {
     HLTError("No sources selected, aborting.");
     return -1;
@@ -254,7 +254,7 @@ void AliHLTHOMERManager::DisconnectHOMER(){
 }
 
 //##################################################################################
-Int_t AliHLTHOMERManager::ReconnectHOMER(){
+Int_t AliHLTHOMERManager::ReconnectHOMER( TString detector="" ){
   // see header file for class documentation
   
   Int_t iResult = 0;
@@ -262,7 +262,7 @@ Int_t AliHLTHOMERManager::ReconnectHOMER(){
   if ( IsConnected() )
     DisconnectHOMER();
 
-  iResult = ConnectHOMER();
+  iResult = ConnectHOMER(detector);
   if ( iResult ) {
     HLTError("Error reconnecting.");
   }
@@ -369,8 +369,8 @@ Int_t AliHLTHOMERManager::NextEvent(){
  */
 
 //##################################################################################
-void AliHLTHOMERManager::CreateReadoutList( const char** sourceHostnames, 
-                                           UShort_t *sourcePorts, UInt_t &sourceCount ){
+void AliHLTHOMERManager::CreateReadoutList( const char** sourceHostnames, UShort_t *sourcePorts, 
+                                           UInt_t &sourceCount, TString detector ){
   // see header file for class documentation
 
   AliHLTHOMERSourceDesc * source= NULL;
@@ -379,8 +379,19 @@ void AliHLTHOMERManager::CreateReadoutList( const char** sourceHostnames,
   TIter next( fSourceList );
   while ( ( source = dynamic_cast<AliHLTHOMERSourceDesc*>(next()) ) ) {
 
-    if ( ! source->IsSelected() )
-      continue;
+    
+
+    // -- If detector name given
+    if ( ! detector.IsNull() ) {
+      // -- Continue if detector name doesn't match
+      if ( detector.CompareTo(source->GetDetector()) )
+       continue;
+    }
+    else {
+      // -- Continue if source is not selected
+      if ( ! source->IsSelected() )
+       continue;
+    }
     
     Bool_t exists = kFALSE;
     
index e830611..ce28031 100644 (file)
@@ -90,19 +90,21 @@ public:
    * ---------------------------------------------------------------------------------
    */
 
-  /** Connect to HOMER sources, out of Readout List, 
+  /** Connect to HOMER sources, of a certain detector.
    *  which gets created when state has changed 
-   *  @return 0 on success, <0 for failure
+   *  @param detector    Detector to be connected to
+   *  @return            0 on success, <0 for failure
    */
-  Int_t ConnectHOMER();
+  Int_t ConnectHOMER( TString detector );
 
   /** Disconnect from HOMER sources */
   void  DisconnectHOMER();
 
   /** Reconnect from HOMER sources 
-   *  @return 0 on success, <0 for failure
+   *  @param detector    Detector to be connected to
+   *  @return            0 on success, <0 for failure
    */
-  Int_t ReconnectHOMER();
+  Int_t ReconnectHOMER( TString detector);
 
   /*
    * ---------------------------------------------------------------------------------
@@ -115,6 +117,11 @@ public:
    */
   virtual Int_t NextEvent();
 
+  /** Loads the next Cycle, after being connected 
+   *  @return 0 on success, <0 for failure
+   */
+  virtual Int_t NextCycle() { return NextEvent(); }
+
   /** Get event ID */
   ULong_t GetEventID() { return fEventID; }    // Get event ID
 
@@ -148,9 +155,10 @@ private:
    *  @param socurceHostnames   Array of selected hostnames
    *  @param socurcePorts       Array of selected ports
    *  @param socurceCount       Number of selected hostname:port
+   *  @param detector           detector to be selected
    */
   void CreateReadoutList( const char** sourceHostnames, UShort_t* sourcePorts, 
-                         UInt_t &sourceCount);
+                         UInt_t &sourceCount, TString detector );
 
   /** Checks if already connected to HOMER sources */
   Bool_t IsConnected() { return fConnected; }  
index f030e2e..7ff8b98 100644 (file)
@@ -257,7 +257,7 @@ Int_t AliHLTHOMERProxyHandler::ProcessXmlRpcResponse() {
   TDOMParser xmlParser;
   xmlParser.SetValidate(kFALSE);
 
-  HLTInfo("XMLResponse:\n %s",fXmlRpcResponse.Data());
+  HLTDebug("XMLResponse:\n %s",fXmlRpcResponse.Data());
 
   iResult = xmlParser.ParseBuffer(fXmlRpcResponse.Data(), fXmlRpcResponse.Length());
   if ( iResult < 0 ) {
@@ -280,7 +280,7 @@ Int_t AliHLTHOMERProxyHandler::ProcessXmlRpcResponse() {
   // -- Get Content
   TString xmlContent(node->GetText() );
 
-  HLTInfo("XMLContent:\n %s",xmlContent.Data());
+  HLTDebug("XMLContent:\n %s",xmlContent.Data());
 
   iResult = xmlParser.ParseBuffer(xmlContent.Data(), xmlContent.Length());
   if ( iResult < 0 ) {
@@ -384,7 +384,7 @@ Int_t AliHLTHOMERProxyHandler::AddService(TXMLNode *innerNode) {
   // ----------------------
 
   AliHLTHOMERSourceDesc * source = new AliHLTHOMERSourceDesc();
-  source->SetService( hostname, port, dataType, dataOrigin, dataSpecification );
+  source->SetService( hostname, port, dataOrigin, dataType, dataSpecification );
 
   fSourceList->Add( source );
 
index ee27790..0803f83 100644 (file)
@@ -68,21 +68,21 @@ void AliHLTHOMERSourceDesc::SetService( TString hostname, Int_t port, TString or
                                        TString type, TString /*spec*/ ) {
   // see header file for class documentation
 
-  fSourceName.Form("%s_%s%_%ul", fDetector.Data(), fDataType.Data(), fSpecification); 
-
   fHostname = hostname;
   fPort = port;
   
   fDataType = type;
   fDataType.Remove( TString::kTrailing, ' ' );
-  
+
   fDetector = origin;
   fDetector.Remove( TString::kTrailing, ' ' );
-  
+
   // -- Temporary until Specification is set in service
   fSpecification = 0;
   fSubDetector = 0;
   fSubSubDetector = 0;
 
+  fSourceName.Form("%s_%s_%lu", fDetector.Data(), fDataType.Data(), fSpecification); 
+
   return;
 }
index 31f3167..d4084e3 100644 (file)
@@ -45,14 +45,32 @@ Int_t HOMERManager() {
 
   printf( "== CONNECT HOMER ==\n" );
   
-  iResult = hM->ConnectHOMER();
+  iResult = hM->ConnectHOMER("TPC");
   if (iResult) return iResult;
   
-  //  printf( "== NEXT EVENT ==\n" );
+  printf( "== NEXT EVENT ==\n" );
   
   iResult = hM->NextEvent();
   if (iResult) return iResult;
 
+  printf( "== LOOP OVER BLOCKS ==\n" );
+
+  TObject * object =  NULL;  
+
+  TIter next(hM->GetBlockList());
+  AliHLTHOMERBlockDesc* block = NULL;
+
+  while ((block = (AliHLTHOMERBlockDesc*)next())) {
+   
+    printf ( "Det : %s\n" ,block->GetDetector().Data() );
+    printf ( "Datatype : %s\n" ,block->GetDataType().Data() );
+    
+    if ( block->IsTObject() )
+      object = block->GetTObject();
+    
+    printf("ClassName %s\n", block->GetClassName() );
+    
+  }
 
   // -- Destroy hM object
   if (hM)