2 // $Id: AliHLTHOMERManager.cxx $
3 //**************************************************************************
4 //* This file is property of and copyright by the ALICE HLT Project *
5 //* ALICE Experiment at CERN, All rights reserved. *
7 //* Primary Authors: Jochen Thaeder <thaeder@kip.uni-heidelberg.de> *
8 //* for The ALICE HLT Project. *
10 //* Permission to use, copy, modify and distribute this software and its *
11 //* documentation strictly for non-commercial purposes is hereby granted *
12 //* without fee, provided that the above copyright notice appears in all *
13 //* copies and that both the copyright notice and this permission notice *
14 //* appear in the supporting documentation. The authors make no claims *
15 //* about the suitability of this software for any purpose. It is *
16 //* provided "as is" without express or implied warranty. *
17 //**************************************************************************
19 /** @file AliHLTHOMERManager.cxx
20 @author Jochen Thaeder
22 @brief Manger for HOMER in aliroot
25 // see header file for class documentation
27 // refer to README to build package
29 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
37 #include "AliHLTHOMERManager.h"
38 // -- -- -- -- -- -- --
39 #include "AliHLTHOMERLibManager.h"
40 #include "AliHLTHOMERSourceDesc.h"
41 #include "AliHLTHOMERBlockDesc.h"
42 // -- -- -- -- -- -- --
43 #include "AliHLTGlobalTriggerDecision.h"
44 #include "AliHLTTriggerDecision.h"
45 //---------------------------
47 ClassImp(AliHLTHOMERManager)
50 * ---------------------------------------------------------------------------------
51 * Constructor / Destructor
52 * ---------------------------------------------------------------------------------
55 //##################################################################################
56 AliHLTHOMERManager::AliHLTHOMERManager() :
57 fLibManager(new AliHLTHOMERLibManager),
58 fStateHasChanged(kTRUE),
66 fAsyncBlockList(NULL),
70 fCurrentBufferIdx(-1),
71 fNavigateBufferIdx(-1),
73 fTriggerString("ALL"),
74 fNEventsNotTriggered(0),
75 fRetryNextEvent(kFALSE) {
76 // see header file for class documentation
78 // refer to README to build package
80 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
84 //##################################################################################
85 AliHLTHOMERManager::~AliHLTHOMERManager() {
86 // see header file for class documentation
91 TIter next(fReaderList);
92 TObject * object = NULL;
93 while ( ( object = next()) )
94 fLibManager->DeleteReader(static_cast<AliHLTHOMERReader*>(object) );
105 if ( fProxyHandler != NULL )
106 delete fProxyHandler;
107 fProxyHandler = NULL;
109 if ( fSourceList != NULL )
113 if ( fEventBuffer ) {
114 fEventBuffer->Clear();
119 if ( fAsyncBlockList ) {
120 fAsyncBlockList->Clear();
121 delete fAsyncBlockList;
123 fAsyncBlockList = NULL;
126 //##################################################################################
127 Int_t AliHLTHOMERManager::Initialize() {
128 // see header file for class documentation
132 // -- Initialize ProxyHandler
133 if ( !fProxyHandler )
134 fProxyHandler = new AliHLTHOMERProxyHandler();
136 if ( fProxyHandler ) {
137 iResult = fProxyHandler->Initialize();
139 HLTError(Form("Initialize of ProxyHandler failed."));
143 HLTError(Form("Creating of ProxyHandler failed."));
146 // -- Initialize ReaderList
147 // List ist not owner, as reader have to be created/deleted by the LibManager
149 fReaderList = new TList();
151 // -- Initialize asynchronous BlockList
152 if( !fAsyncBlockList ) {
153 fAsyncBlockList = new TList();
154 fAsyncBlockList->SetOwner(kTRUE);
157 // -- Initialize Event Buffer and EventID array
158 if ( !fEventBuffer ) {
159 fEventBuffer = new TClonesArray( "TList", BUFFERSIZE );
162 for ( Int_t idx = 0; idx < BUFFERSIZE; ++idx ) {
163 new ((*fEventBuffer)[idx]) TList( );
164 (reinterpret_cast<TList*>((*fEventBuffer)[idx]))->SetOwner(kTRUE);
173 * ---------------------------------------------------------------------------------
175 * ---------------------------------------------------------------------------------
178 //##################################################################################
179 Int_t AliHLTHOMERManager::CreateSourcesList() {
180 // see header file for class documentation
184 if ( fSourceList != NULL )
188 fSourceList = new TList();
189 fSourceList->SetOwner( kTRUE );
191 iResult = fProxyHandler->FillSourceList( fSourceList );
193 HLTWarning(Form("There have been errors, while creating the sources list."));
195 else if ( iResult > 0 ) {
196 HLTWarning(Form("No active services found."));
198 else if ( fSourceList->IsEmpty() ) {
199 HLTWarning(Form("No active services in the list."));
203 HLTInfo(Form("New sources list created."));
205 // -- New SourceList has been created
206 // --> All Sources are new --> State has changed
207 fStateHasChanged = kTRUE;
213 //##################################################################################
214 void AliHLTHOMERManager::SetSourceState( AliHLTHOMERSourceDesc * source, Bool_t state ) {
215 // see header file for class documentation
217 if ( source->IsSelected() != state ) {
218 source->SetState( state );
219 fStateHasChanged = kTRUE;
226 * ---------------------------------------------------------------------------------
227 * Connection Handling - public
228 * ---------------------------------------------------------------------------------
231 //##################################################################################
232 Int_t AliHLTHOMERManager::ConnectHOMER( TString detector ){
233 // see header file for class documentation
241 // -- Check if LibManager is present
242 if ( ! fLibManager ) {
243 HLTError(Form("No LibManager present."));
247 // -- Check if already connected and state has not changed
248 if ( fStateHasChanged == kFALSE && IsConnected() ) {
249 HLTInfo(Form("No need for reconnection."));
253 // -- If already connected, disconnect before connect
254 // or if ReaderList already filled
255 if ( IsConnected() || fReaderList->GetSize() != 0 )
258 // -- Create the Readoutlist
259 UShort_t* sourcePorts = new UShort_t [fSourceList->GetEntries()];
260 const Char_t ** sourceHostnames = new const Char_t* [fSourceList->GetEntries()];
261 UInt_t sourceCount = 0;
263 CreateReadoutList( sourceHostnames, sourcePorts, sourceCount, detector );
264 if ( sourceCount == 0 ) {
265 HLTError(Form("No sources selected, aborting."));
270 // *** Connect to data sources
273 for (UInt_t idx = 0; idx < sourceCount; idx++) {
275 HLTInfo(Form("Adding source %d as %s : %d", idx, sourceHostnames[idx], sourcePorts[idx]));
277 fReaderList->Add(dynamic_cast<TObject*>(fLibManager->OpenReader(sourceHostnames[idx], sourcePorts[idx])));
278 AliHLTHOMERReader *reader = static_cast<AliHLTHOMERReader*>(fReaderList->Last());
280 HLTError(Form("Adding reader failed, aborting"));
284 if ( (iResult = reader->GetConnectionStatus()) ) {
286 // -- Connection to source failed
288 HLTError(Form("Error establishing connection to TCP source %s:%hu: %s (%d)",
289 sourceHostnames[idx], sourcePorts[idx], strerror(iResult), iResult));
291 if( !(TString(sourceHostnames[idx]).CompareTo("localhost")) ) {
292 HLTInfo("The failed connection is on localhost. is SSH tunnel up????? ");
293 HLTInfo(Form("Do: 'ssh -L %d:alihlt-vobox0.cern.ch:%d cernUser@lxplus.cern.ch -fN'",
294 sourcePorts[idx], sourcePorts[idx]));
298 fReaderList->RemoveLast();
301 fLibManager->DeleteReader( reader );
304 HLTInfo(Form("Removed source %d, %s : %d from sourceList", idx, sourceHostnames[idx], sourcePorts[idx]));
308 // -- Connection succeded
311 HLTInfo(Form("Connection established to source %s on port %d", sourceHostnames[idx], sourcePorts[idx]));
314 } // for (Int_t idx = 0; idx < sourceCount; idx++) {
316 delete[] sourceHostnames;
317 delete[] sourcePorts;
323 //##################################################################################
324 void AliHLTHOMERManager::DisconnectHOMER(){
325 // see header file for class documentation
327 if ( ! IsConnected() )
330 if ( fReaderList && fLibManager ) {
331 TIter next(fReaderList);
332 TObject * object = NULL;
333 while ( ( object = next()) )
334 fLibManager->DeleteReader(static_cast<AliHLTHOMERReader*>(object) );
336 fReaderList->Clear();
341 fStateHasChanged = kTRUE;
344 HLTInfo(Form("Connection closed."));
349 //##################################################################################
350 Int_t AliHLTHOMERManager::ReconnectHOMER( TString detector="" ){
351 // see header file for class documentation
358 iResult = ConnectHOMER(detector);
360 HLTError(Form("Error reconnecting."));
367 * ---------------------------------------------------------------------------------
368 * Event Handling - public
369 * ---------------------------------------------------------------------------------
372 //##################################################################################
373 Int_t AliHLTHOMERManager::NextEvent(){
375 // see header file for class documentation
378 Int_t iRetryCount = 0;
380 if ( !IsConnected() || fStateHasChanged )
383 if ( !IsConnected() ) {
384 HLTWarning(Form( "Not connected yet." ));
388 // -- Reset asyncronous BlockList
389 fAsyncBlockList->Clear();
392 // *** Loop over all readers and get new event data
395 TIter next(fReaderList);
396 TObject * object = NULL;
398 while( (object = next()) ) {
400 fCurrentReader = static_cast<AliHLTHOMERReader*>(object);
402 // -- Read next event data and error handling for HOMER (error codes and empty blocks)
405 iResult = fCurrentReader->ReadNextEvent( 40000000 /*timeout in us*/);
407 if ( iResult == 111 || iResult == 32 || iResult == 6 ) {
408 HLTError(Form("No connection to source %d: %s (%d)",
409 fCurrentReader->GetErrorConnectionNdx(), strerror(iResult), iResult));
412 else if ( iResult == 110 ) {
413 HLTError(Form("Timeout occured, reading event from source %d: %s (%d)",
414 fCurrentReader->GetErrorConnectionNdx(), strerror(iResult), iResult));
417 else if ( iResult == 56 ) {
420 if ( iRetryCount >= 20 ) {
421 HLTError(Form("Retry Failed: Error reading event from source %d: %s (%d), returning",
422 fCurrentReader->GetErrorConnectionNdx(), strerror(iResult), iResult));
426 HLTError(Form("Retry: Error reading event from source %d: %s (%d), making another attempt (no %d out of 20)",
427 fCurrentReader->GetErrorConnectionNdx(), strerror(iResult), iResult, iRetryCount));
432 else if ( iResult ) {
433 HLTError(Form("General Error reading event from source %d: %s (%d), giving up",
434 fCurrentReader->GetErrorConnectionNdx(), strerror(iResult), iResult));
444 // -- Check if event could be read
448 // -- Handle Blocks from current reader
449 iResult = HandleBlocks();
451 HLTError(Form("Handling of blocks failed."));
454 } // while( (object = next()) ) {
456 // -- Check if NextEvent should be recalled,
457 // to catch the next event with a trigger
458 if ( fRetryNextEvent ) {
460 fRetryNextEvent = kFALSE;
462 HLTInfo(Form("Checked trigger of %d events, without triggering", fNEventsNotTriggered));
469 /* ---------------------------------------------------------------------------------
470 * Buffer Handling - public
471 * ---------------------------------------------------------------------------------
474 //##################################################################################
475 Int_t AliHLTHOMERManager::NavigateEventBufferBack() {
476 // see header file for class documentation
478 // -- reached the end of the buffer
479 if ( fNavigateBufferIdx == fBufferLowIdx )
482 Int_t newIdx = fNavigateBufferIdx - 1;
484 newIdx = BUFFERSIZE-1;
486 fCurrentBufferIdx = fNavigateBufferIdx = newIdx;
491 //##################################################################################
492 Int_t AliHLTHOMERManager::NavigateEventBufferFwd() {
493 // see header file for class documentation
495 // -- reached the top of the buffer
496 if ( fNavigateBufferIdx == fBufferTopIdx )
499 Int_t newIdx = fNavigateBufferIdx + 1;
500 if ( newIdx == BUFFERSIZE )
503 fCurrentBufferIdx = fNavigateBufferIdx = newIdx;
508 ///////////////////////////////////////////////////////////////////////////////////
511 * ---------------------------------------------------------------------------------
512 * Connection Handling - private
513 * ---------------------------------------------------------------------------------
516 //##################################################################################
517 void AliHLTHOMERManager::CreateReadoutList( const char** sourceHostnames, UShort_t *sourcePorts,
518 UInt_t &sourceCount, TString detector ){
519 // see header file for class documentation
521 AliHLTHOMERSourceDesc * source= NULL;
523 // -- Read all sources and check if they should be read out
524 TIter next( fSourceList );
525 while ( ( source = dynamic_cast<AliHLTHOMERSourceDesc*>(next()) ) ) {
527 // -- If detector NO detector name given
528 if ( ! detector.CompareTo("ALL") ) {
529 // -- Continue if source is not selected
531 //if ( ! source->IsSelected() )
534 // -- DetectorName given
536 // -- Continue if detector name doesn't match
537 if ( detector.CompareTo(source->GetDetector()) )
543 Bool_t exists = kFALSE;
545 // -- Loop over existing entries and check if entry is already in readout list
546 for ( UInt_t ii = 0; ii < sourceCount; ii++ ){
547 if ( !strcmp( sourceHostnames[ii], source->GetHostname().Data() )
548 && sourcePorts[ii] == source->GetPort() ) {
554 // -- Add new entires to readout list
556 sourcePorts[sourceCount] = source->GetPort();
557 sourceHostnames[sourceCount] = source->GetHostname().Data();
561 } // while ( ( source = (AliHLTHOMERSourceDesc*)next() ) ) {
563 fStateHasChanged = kFALSE;
569 * ---------------------------------------------------------------------------------
570 * Buffer Handling - private
571 * ---------------------------------------------------------------------------------
574 //##################################################################################
575 void AliHLTHOMERManager::AddBlockListToBuffer() {
576 // see header file for class documentation
578 // -- Check if event is already in buffer
579 ULong_t eventID = static_cast<ULong64_t>(fCurrentReader->GetEventID());
581 if ( fEventID[fBufferTopIdx] == eventID ) {
582 HLTInfo(Form("Event 0x%016LX (%Lu) already in buffer.", eventID, eventID));
586 // -- Check if event should be selected on basis of trigger string
587 if( fTriggerString.CompareTo("ALL") ){
588 if ( !CheckTriggerDecision() ) {
589 HLTInfo(Form("Event 0x%016LX (%Lu) is not triggered by %s.",
590 eventID, eventID, fTriggerString.Data()));
595 HLTInfo("No trigger selection.");
600 if ( fBufferTopIdx == BUFFERSIZE )
603 // -- Change the low mark if necessary
604 if ( fBufferLowIdx == -1 )
606 else if ( fBufferTopIdx == fBufferLowIdx ) {
608 if ( fBufferLowIdx == BUFFERSIZE )
612 fNavigateBufferIdx = fCurrentBufferIdx = fBufferTopIdx;
615 fEventID[fBufferTopIdx] = eventID;
617 // -- Clear Buffer slot
618 (reinterpret_cast<TList*>((*fEventBuffer)[fBufferTopIdx]))->Clear();
623 // -- Fill block list
626 // -- Create new block
627 AliHLTHOMERBlockDesc * block = new AliHLTHOMERBlockDesc();
628 block->SetBlock( GetBlk(), GetBlkSize(), GetBlkOrigin(),
629 GetBlkType(), GetBlkSpecification() );
631 // -- Check sources list if block is requested
632 if ( CheckIfRequested( block ) ) {
633 (reinterpret_cast<TList*>((*fEventBuffer)[fBufferTopIdx]))->Add( block );
637 (reinterpret_cast<TList*>((*fEventBuffer)[fBufferTopIdx]))->Add( block );
642 } while( GetNextBlk() );
647 //##################################################################################
648 void AliHLTHOMERManager::AddToAsyncBlockList() {
649 // see header file for class documentation
651 HLTInfo("Adding blocks to the asynchroneous block list");
655 // -- Fill block list
658 // -- Create new block
659 AliHLTHOMERBlockDesc * block = new AliHLTHOMERBlockDesc();
660 block->SetBlock( GetBlk(), GetBlkSize(), GetBlkOrigin(),
661 GetBlkType(), GetBlkSpecification() );
663 // -- Check sources list if block is requested
664 if ( CheckIfRequested( block ) )
665 fAsyncBlockList->Add( block );
668 fAsyncBlockList->Add( block );
673 } while( GetNextBlk() );
677 //##################################################################################
678 TList* AliHLTHOMERManager::GetBlockListEventBuffer( Int_t idx ) {
679 // see header file for class documentation
684 return reinterpret_cast<TList*>((*fEventBuffer)[idx]);
689 * ---------------------------------------------------------------------------------
690 * Block Handling - private
691 * ---------------------------------------------------------------------------------
694 //##################################################################################
695 Int_t AliHLTHOMERManager::HandleBlocks() {
696 // see header file for class documentation
700 // -- Get blockCnt and eventID
701 fNBlks = static_cast<ULong_t>(fCurrentReader->GetBlockCnt());
702 ULong_t eventID = static_cast<ULong64_t>(fCurrentReader->GetEventID());
705 // -- Check if blocks present
707 HLTWarning(Form("Event 0x%016LX (%Lu) with no blocks", eventID, eventID));
711 HLTInfo(Form("Event 0x%016LX (%Lu) with %lu blocks", eventID, eventID, fNBlks));
714 // Loop for Debug only
715 for ( ULong_t ii = 0; ii < fNBlks; ii++ ) {
716 Char_t tmp1[9], tmp2[5];
717 memset( tmp1, 0, 9 );
718 memset( tmp2, 0, 5 );
720 ULong64_t* tmp12 = static_cast<ULong64_t*>(tmp11);
721 *tmp12 = fCurrentReader->GetBlockDataType(ii);
723 ULong_t* tmp22 = static_cast<ULong_t*>(tmp21);
724 *tmp22 = fCurrentReader->GetBlockDataOrigin(ii);
725 HLTInfo(Form( "Block %lu length: %lu - type: %s - origin: %s - spec 0x%08X",
726 ii, fCurrentReader->GetBlockDataLength(ii), tmp1, tmp2, fCurrentReader->GetBlockDataSpec(ii) ));
727 } // end for ( ULong_t ii = 0; ii < fNBlks; ii++ ) {
730 // -- Check if blocks are from syncronous source
732 if ( IsSyncBlocks() )
733 AddBlockListToBuffer();
735 AddToAsyncBlockList();
740 //##################################################################################
741 Bool_t AliHLTHOMERManager::IsSyncBlocks() {
742 // see header file for class documentation
744 Bool_t bResult = kFALSE;
750 if ( !GetBlkType().CompareTo("ALIESDV0")) {
755 if ( !GetBlkType().CompareTo("ROOTTOBJ") ) {
756 AliHLTHOMERBlockDesc blockDesc;
758 blockDesc.SetBlock( GetBlk(), GetBlkSize(), GetBlkOrigin(),
759 GetBlkType(), GetBlkSpecification() );
760 if ( !blockDesc.GetClassName().CompareTo("AliHLTGlobalTriggerDecision") ) {
767 } while( GetNextBlk() );
773 //##################################################################################
774 void* AliHLTHOMERManager::GetBlk( Int_t ndx ) {
775 // see header file for class documentation
776 // Get pointer to current block in current event
778 if ( !fCurrentReader || !IsConnected() ) {
779 HLTError(Form("Not connected yet."));
782 if ( ndx < static_cast<Int_t>(fNBlks) )
783 return const_cast<void*> (fCurrentReader->GetBlockData(ndx));
788 //##################################################################################
789 ULong_t AliHLTHOMERManager::GetBlkSize( Int_t ndx ) {
790 // see header file for class documentation
792 if ( !fCurrentReader || !IsConnected() ) {
793 HLTError(Form("Not connected yet."));
797 if ( ndx < static_cast<Int_t>(fNBlks) )
798 return static_cast<ULong_t> (fCurrentReader->GetBlockDataLength(ndx));
803 //##################################################################################
804 TString AliHLTHOMERManager::GetBlkOrigin( Int_t ndx ) {
805 // see header file for class documentation
809 // -- Check for Connection
810 if ( !fCurrentReader || ! IsConnected() ) {
811 HLTError(Form("Not connected yet."));
815 // -- Check block index
816 if ( ndx >= static_cast<Int_t>(fNBlks) ) {
817 HLTError(Form("Block index %d out of range.", ndx ));
827 reverseOrigin.data = static_cast<UInt_t>(fCurrentReader->GetBlockDataOrigin(ndx));
829 // -- Reverse the order
830 for (Int_t ii = 3; ii >= 0; ii-- )
831 if ( reverseOrigin.array[ii] != ' ')
832 origin.Append( reverseOrigin.array[ii] );
834 origin.Remove( TString::kTrailing, ' ' );
839 //##################################################################################
840 TString AliHLTHOMERManager::GetBlkType( Int_t ndx ) {
841 // see header file for class documentation
845 // -- Check for Connection
846 if ( !fCurrentReader || ! IsConnected() ) {
847 HLTError(Form("Not connected yet."));
851 // -- Check block index
852 if ( ndx >= static_cast<Int_t>(fNBlks) ) {
853 HLTError(Form("Block index %d out of range.", ndx ));
863 reverseType.data = static_cast<ULong64_t> (fCurrentReader->GetBlockDataType(ndx));
865 // -- Reverse the order
866 for (Int_t ii = 7; ii >= 0; ii-- )
867 if ( reverseType.array[ii] != ' ')
868 type.Append( reverseType.array[ii] );
870 type.Remove( TString::kTrailing, ' ' );
875 //##################################################################################
876 ULong_t AliHLTHOMERManager::GetBlkSpecification( Int_t ndx ) {
877 // see header file for class documentation
879 // -- Check for Connection
880 if ( !fCurrentReader || ! IsConnected() ) {
881 HLTError(Form("Not connected yet."));
885 // -- Check block index
886 if ( ndx >= static_cast<Int_t>(fNBlks) ) {
887 HLTError(Form("Block index %d out of range.", ndx ));
891 return static_cast<ULong_t>(fCurrentReader->GetBlockDataSpec(ndx));
894 //##################################################################################
895 Bool_t AliHLTHOMERManager::CheckIfRequested( AliHLTHOMERBlockDesc * block ) {
896 // see header file for class documentation
898 Bool_t requested = kFALSE;
900 AliHLTHOMERSourceDesc * source= NULL;
902 // -- Read all sources and check if they should be read out
903 TIter next( fSourceList );
904 while ( ( source = dynamic_cast<AliHLTHOMERSourceDesc*>(next()) ) ) {
906 // -- Check if source is selected
907 if ( ! source->IsSelected() )
910 // -- Check if detector matches
911 if ( source->GetSourceName().CompareTo( block->GetBlockName() ) )
917 } // while ( ( source = dynamic_cast<AliHLTHOMERSourceDesc*>(next()) ) ) {
921 HLTInfo(Form("Block requested : %s", block->GetBlockName().Data()));
924 HLTInfo(Form("Block NOT requested : %s", block->GetBlockName().Data()));
931 /* ---------------------------------------------------------------------------------
932 * Trigger Handling - private
933 * ---------------------------------------------------------------------------------
936 //##################################################################################
937 Bool_t AliHLTHOMERManager::CheckTriggerDecision() {
938 // see header file for class documentation
940 Bool_t triggered = kFALSE;
942 if ( !fCurrentReader || !IsConnected() ) {
943 HLTError(Form("Not connected yet."));
947 AliHLTHOMERBlockDesc blockDesc;
951 // -- Fill block list
952 Bool_t foundTriggerBlock = kFALSE;
955 if ( (GetBlkType().CompareTo("ROOTTOBJ") == 0) ) {
956 blockDesc.SetBlock( GetBlk(), GetBlkSize(), GetBlkOrigin(),
957 GetBlkType(), GetBlkSpecification() );
959 if ( ! blockDesc.GetClassName().CompareTo("AliHLTGlobalTriggerDecision") ) {
961 foundTriggerBlock = kTRUE;
966 } while( GetNextBlk() );
968 if ( !foundTriggerBlock ) {
969 HLTError(Form("No trigger decision object found"));
973 // -- Get the global decision object
974 AliHLTGlobalTriggerDecision* globalDecision =
975 static_cast<AliHLTGlobalTriggerDecision*>(blockDesc.GetTObject());
977 if ( fTriggerString.CompareTo("HLTGlobalTrigger") == 0 ) {
978 triggered = globalDecision->EventTriggered();
982 for (Int_t idx = 0; idx < globalDecision->NumberOfInputObjects(); idx++) {
984 const AliHLTTriggerDecision* triggerDecision =
985 reinterpret_cast<const AliHLTTriggerDecision*>(globalDecision->InputObject(idx));
987 if ( !(fTriggerString.CompareTo(triggerDecision->Description())) ) {
988 triggered = triggerDecision->EventTriggered();
991 } // for (Int_t idx = 0; idx < globalDecision->NumberOfInputObjects(); idx++) {
997 fRetryNextEvent = kFALSE;
998 fNEventsNotTriggered = 0;
1001 fRetryNextEvent = kTRUE;
1002 ++fNEventsNotTriggered;