X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=HLT%2FBASE%2FAliHLTHOMERManager.cxx;h=9461b221d5240212c12c9752dbe30050e4c08b44;hb=4cf7c8b2bacc93805f5336fc94662d5cc0820cb2;hp=2b2229c797fd51f0064892a7c657f0a528c655b1;hpb=6c1e30efd1646fac128c51f5da35feb033532862;p=u%2Fmrichter%2FAliRoot.git diff --git a/HLT/BASE/AliHLTHOMERManager.cxx b/HLT/BASE/AliHLTHOMERManager.cxx index 2b2229c797f..9461b221d52 100644 --- a/HLT/BASE/AliHLTHOMERManager.cxx +++ b/HLT/BASE/AliHLTHOMERManager.cxx @@ -1,5 +1,5 @@ //-*- Mode: C++ -*- -// $Id: AliHLTHOMERManager.cxx $ +// $Id$ //************************************************************************** //* This file is property of and copyright by the ALICE HLT Project * //* ALICE Experiment at CERN, All rights reserved. * @@ -62,17 +62,22 @@ ClassImp(AliHLTHOMERManager) fSourceList(NULL), fNBlks(0), fEventID(), + fEventId(-1), fCurrentBlk(0), fAsyncBlockList(NULL), - fEventBuffer(NULL), + fBlockList(NULL), + fEventBuffer(NULL), fBufferTopIdx(-1), fBufferLowIdx(-1), fCurrentBufferIdx(-1), fNavigateBufferIdx(-1), + fNEventsAvailable(0), fConnected(kFALSE), fTriggerString("ALL"), fNEventsNotTriggered(0), - fRetryNextEvent(kFALSE) { + fRetryNextEvent(kFALSE), + fIsBlockOwner(kTRUE) +{ // see header file for class documentation // or // refer to README to build package @@ -116,8 +121,14 @@ AliHLTHOMERManager::~AliHLTHOMERManager() { } fEventBuffer = NULL; + if(fBlockList) { + fBlockList->Clear(); + delete fBlockList; + } + fBlockList = NULL; + if ( fAsyncBlockList ) { - fAsyncBlockList->Clear(); + fAsyncBlockList->Delete(); delete fAsyncBlockList; } fAsyncBlockList = NULL; @@ -127,6 +138,8 @@ AliHLTHOMERManager::~AliHLTHOMERManager() { Int_t AliHLTHOMERManager::Initialize() { // see header file for class documentation + HLTInfo("Initializing"); + Int_t iResult = 0; // -- Initialize ProxyHandler @@ -137,8 +150,8 @@ Int_t AliHLTHOMERManager::Initialize() { iResult = fProxyHandler->Initialize(); if (iResult) HLTError(Form("Initialize of ProxyHandler failed.")); - } - else { + + } else { iResult = -1; HLTError(Form("Creating of ProxyHandler failed.")); } @@ -154,6 +167,12 @@ Int_t AliHLTHOMERManager::Initialize() { fAsyncBlockList->SetOwner(kTRUE); } + //initialize normal block list + if( !fBlockList ) { + fBlockList = new TList(); + fBlockList->SetOwner(kFALSE); + } + // -- Initialize Event Buffer and EventID array if ( !fEventBuffer ) { fEventBuffer = new TClonesArray( "TList", BUFFERSIZE ); @@ -180,7 +199,7 @@ Int_t AliHLTHOMERManager::CreateSourcesList() { // see header file for class documentation Int_t iResult = 0; - + if ( fSourceList != NULL ) delete fSourceList; fSourceList = NULL; @@ -252,9 +271,10 @@ Int_t AliHLTHOMERManager::ConnectHOMER( TString detector ){ // -- If already connected, disconnect before connect // or if ReaderList already filled - if ( IsConnected() || fReaderList->GetSize() != 0 ) + if ( IsConnected() || fReaderList->GetSize() != 0 ) { + HLTInfo(Form("IsConnected: %d fReaderList.Size: %d", IsConnected(), fReaderList->GetSize())); DisconnectHOMER(); - + } // -- Create the Readoutlist UShort_t* sourcePorts = new UShort_t [fSourceList->GetEntries()]; const Char_t ** sourceHostnames = new const Char_t* [fSourceList->GetEntries()]; @@ -272,6 +292,9 @@ Int_t AliHLTHOMERManager::ConnectHOMER( TString detector ){ for (UInt_t idx = 0; idx < sourceCount; idx++) { + if (sourcePorts[idx] > 60000) + continue; + HLTInfo(Form("Adding source %d as %s : %d", idx, sourceHostnames[idx], sourcePorts[idx])); fReaderList->Add(dynamic_cast(fLibManager->OpenReader(sourceHostnames[idx], sourcePorts[idx]))); @@ -324,23 +347,27 @@ Int_t AliHLTHOMERManager::ConnectHOMER( TString detector ){ void AliHLTHOMERManager::DisconnectHOMER(){ // see header file for class documentation - if ( ! IsConnected() ) - return; + HLTInfo("Disconnecting"); if ( fReaderList && fLibManager ) { + HLTInfo("Deleting readerlist and libmanager"); TIter next(fReaderList); TObject * object = NULL; while ( ( object = next()) ) fLibManager->DeleteReader(static_cast(object) ); + + HLTInfo(Form("fReaderList size %d", fReaderList->GetSize())); fReaderList->Clear(); + HLTInfo(Form("fReaderList size %d", fReaderList->GetSize())); delete fReaderList; - fReaderList = NULL; + fReaderList = new TList (); + HLTInfo(Form("fReaderList size %d", fReaderList->GetSize())); } fStateHasChanged = kTRUE; fConnected = kFALSE; - + HLTInfo(Form("Connection closed.")); return; @@ -377,16 +404,18 @@ Int_t AliHLTHOMERManager::NextEvent(){ Int_t iResult = 0; Int_t iRetryCount = 0; - if ( !IsConnected() || fStateHasChanged ) - ConnectHOMER(); - + if ( !IsConnected() || fStateHasChanged ) { + HLTInfo("Not connected or state has changed, returning to AliEveHOMERManager, which will deal with this situation"); + // cout << "connectecd " << IsConnected() << "haschanged "<Clear(); + fAsyncBlockList->Delete(); // *** // *** Loop over all readers and get new event data @@ -436,15 +465,18 @@ Int_t AliHLTHOMERManager::NextEvent(){ break; } else { + HLTDebug("Successfully read out event from source"); break; } } // while( 1 ) { // -- Check if event could be read - if ( iResult ) + if ( iResult ) { + HLTInfo("Reading event from source failed"); continue; - + } + // -- Handle Blocks from current reader iResult = HandleBlocks(); if ( iResult ) { @@ -453,17 +485,7 @@ Int_t AliHLTHOMERManager::NextEvent(){ } // while( (object = next()) ) { - // -- Check if NextEvent should be recalled, - // to catch the next event with a trigger - if ( fRetryNextEvent ) { - usleep(1000000); - fRetryNextEvent = kFALSE; - - HLTInfo(Form("Checked trigger of %d events, without triggering", fNEventsNotTriggered)); - return NextEvent(); - } - else - return 0; + return iResult; } /* --------------------------------------------------------------------------------- @@ -492,6 +514,8 @@ Int_t AliHLTHOMERManager::NavigateEventBufferBack() { Int_t AliHLTHOMERManager::NavigateEventBufferFwd() { // see header file for class documentation + HLTInfo(Form("fNavigateBufferIdx: %d, fCurrentBufferIdx %d, fBufferTopIdx %d", fNavigateBufferIdx, fCurrentBufferIdx, fBufferTopIdx)); + // -- reached the top of the buffer if ( fNavigateBufferIdx == fBufferTopIdx ) return -1; @@ -501,8 +525,12 @@ Int_t AliHLTHOMERManager::NavigateEventBufferFwd() { newIdx = 0; fCurrentBufferIdx = fNavigateBufferIdx = newIdx; + fNEventsAvailable -= 1; - return newIdx; + HLTInfo(Form("fNavigateBufferIdx: %d, fCurrentBufferIdx %d, fBufferTopIdx %d", fNavigateBufferIdx, fCurrentBufferIdx, fBufferTopIdx)); + + + return 0; } /////////////////////////////////////////////////////////////////////////////////// @@ -524,6 +552,9 @@ void AliHLTHOMERManager::CreateReadoutList( const char** sourceHostnames, UShort TIter next( fSourceList ); while ( ( source = dynamic_cast(next()) ) ) { + ///Don't use sources from dev cluster + if(source->GetPort() > 60000) continue; + // -- If detector NO detector name given if ( ! detector.CompareTo("ALL") ) { // -- Continue if source is not selected @@ -574,25 +605,25 @@ void AliHLTHOMERManager::CreateReadoutList( const char** sourceHostnames, UShort //################################################################################## void AliHLTHOMERManager::AddBlockListToBuffer() { // see header file for class documentation - // -- Check if event is already in buffer ULong_t eventID = static_cast(fCurrentReader->GetEventID()); if ( fEventID[fBufferTopIdx] == eventID ) { - HLTInfo(Form("Event 0x%016LX (%Lu) already in buffer.", eventID, eventID)); + HLTInfo(Form("Event 0x%016lX (%lu) already in buffer.", eventID, eventID)); return; } // -- Check if event should be selected on basis of trigger string if( fTriggerString.CompareTo("ALL") ){ if ( !CheckTriggerDecision() ) { - HLTInfo(Form("Event 0x%016LX (%Lu) is not triggered by %s.", - eventID, eventID, fTriggerString.Data())); + HLTInfo("Event not triggered"); return; + } else { + HLTInfo("Event triggered"); } } else { - HLTInfo("No trigger selection."); + HLTDebug("No trigger selection."); } // -- Set Top mark @@ -609,14 +640,17 @@ void AliHLTHOMERManager::AddBlockListToBuffer() { fBufferLowIdx = 0; } - fNavigateBufferIdx = fCurrentBufferIdx = fBufferTopIdx; // -- Fill EventID fEventID[fBufferTopIdx] = eventID; // -- Clear Buffer slot (reinterpret_cast((*fEventBuffer)[fBufferTopIdx]))->Clear(); - + if(fBlockList->IsOwner()) HLTWarning("block list is owner!!"); + HLTInfo(Form("fBlockList size %d", fBlockList->GetSize())); + //fBlockList->Clear(); + fBlockList = new TList(); + HLTInfo(Form("fBlockList size %d", fBlockList->GetSize())); GetFirstBlk(); @@ -631,16 +665,21 @@ void AliHLTHOMERManager::AddBlockListToBuffer() { // -- Check sources list if block is requested if ( CheckIfRequested( block ) ) { (reinterpret_cast((*fEventBuffer)[fBufferTopIdx]))->Add( block ); + fBlockList->Add(block); } else { // XXX HACK Jochen (reinterpret_cast((*fEventBuffer)[fBufferTopIdx]))->Add( block ); + fBlockList->Add(block); // delete block; // block = NULL; } } while( GetNextBlk() ); + //We have one more event available + fNEventsAvailable++; + HLTInfo(Form("fNEventsAvailable %d", fNEventsAvailable)); return; } @@ -652,46 +691,62 @@ void AliHLTHOMERManager::AddToAsyncBlockList() { GetFirstBlk(); - // -- Fill block list do { - // -- Create new block AliHLTHOMERBlockDesc * block = new AliHLTHOMERBlockDesc(); block->SetBlock( GetBlk(), GetBlkSize(), GetBlkOrigin(), GetBlkType(), GetBlkSpecification() ); - // -- Check sources list if block is requested - if ( CheckIfRequested( block ) ) - fAsyncBlockList->Add( block ); - else { - // XXX HACK Jochen - fAsyncBlockList->Add( block ); - // delete block; - // block = NULL; - } + + fAsyncBlockList->Add( block ); } while( GetNextBlk() ); return; } -//################################################################################## +//__________________________________________________________________________________ +void AliHLTHOMERManager::AddToBlockList() { + // see header file for class documentation + HLTInfo("Adding blocks to the synchroneous block list"); + + ULong_t eventID = static_cast(fCurrentReader->GetEventID()); + + if ( fEventId == eventID ) { + HLTInfo(Form("Event 0x%016lX (%lu) already in buffer.", eventID, eventID)); + return; + } + + fEventId = eventID; + + GetFirstBlk(); + do { + + AliHLTHOMERBlockDesc * block = new AliHLTHOMERBlockDesc(); + block->SetBlock( GetBlk(), GetBlkSize(), GetBlkOrigin(), + GetBlkType(), GetBlkSpecification() ); + fBlockList->Add( block ); + + } while( GetNextBlk() ); +} + +//__________________________________________________________________________________ TList* AliHLTHOMERManager::GetBlockListEventBuffer( Int_t idx ) { // see header file for class documentation - if ( idx == -1 ) + if(fBlockList) + return fBlockList; + else return NULL; + if ( idx == -1 ) + return NULL; + return reinterpret_cast((*fEventBuffer)[idx]); } -/* - * --------------------------------------------------------------------------------- - * Block Handling - private - * --------------------------------------------------------------------------------- - */ -//################################################################################## +//__________________________________________________________________________________ Int_t AliHLTHOMERManager::HandleBlocks() { // see header file for class documentation @@ -704,40 +759,24 @@ Int_t AliHLTHOMERManager::HandleBlocks() { // -- Check if blocks present if ( fNBlks == 0 ) { - HLTWarning(Form("Event 0x%016LX (%Lu) with no blocks", eventID, eventID)); + HLTWarning(Form("Event 0x%016lX (%lu) with no blocks", eventID, eventID)); return -1; } - HLTInfo(Form("Event 0x%016LX (%Lu) with %lu blocks", eventID, eventID, fNBlks)); - -#if EVE_DEBUG - // Loop for Debug only - for ( ULong_t ii = 0; ii < fNBlks; ii++ ) { - Char_t tmp1[9], tmp2[5]; - memset( tmp1, 0, 9 ); - memset( tmp2, 0, 5 ); - void *tmp11 = tmp1; - ULong64_t* tmp12 = static_cast(tmp11); - *tmp12 = fCurrentReader->GetBlockDataType(ii); - void *tmp21 = tmp2; - ULong_t* tmp22 = static_cast(tmp21); - *tmp22 = fCurrentReader->GetBlockDataOrigin(ii); - HLTInfo(Form( "Block %lu length: %lu - type: %s - origin: %s - spec 0x%08X", - ii, fCurrentReader->GetBlockDataLength(ii), tmp1, tmp2, fCurrentReader->GetBlockDataSpec(ii) )); - } // end for ( ULong_t ii = 0; ii < fNBlks; ii++ ) { -#endif + HLTInfo(Form("Event 0x%016lX (%lu) with %lu blocks", eventID, eventID, fNBlks)); - // -- Check if blocks are from syncronous source + if ( IsSyncBlocks() ) { + //AddBlockListToBuffer(); + fBlockList->Clear(); + AddToBlockList(); + } else { + AddToAsyncBlockList(); + } - if ( IsSyncBlocks() ) - AddBlockListToBuffer(); - else - AddToAsyncBlockList(); - return iResult; } -//################################################################################## +//__________________________________________________________________________________ Bool_t AliHLTHOMERManager::IsSyncBlocks() { // see header file for class documentation @@ -751,6 +790,11 @@ Bool_t AliHLTHOMERManager::IsSyncBlocks() { bResult = kTRUE; break; } + + if ( !GetBlkType().CompareTo("GLOBTRIG")) { + bResult = kTRUE; + break; + } if ( !GetBlkType().CompareTo("ROOTTOBJ") ) { AliHLTHOMERBlockDesc blockDesc; @@ -941,7 +985,7 @@ Bool_t AliHLTHOMERManager::CheckTriggerDecision() { if ( !fCurrentReader || !IsConnected() ) { HLTError(Form("Not connected yet.")); - return NULL; + return kFALSE; } AliHLTHOMERBlockDesc blockDesc;