ROOT logo
// $Id$
/**
 * @file print-RAW-HLTdecision.C
 * @brief Print HLT decisions per event of RAW data
 * The uses the RawReader interface for data access and can be used
 * with different types of data as long as a RawReader is implemented.
 *
 * <pre>
 * Usage: aliroot -b -q print-RAW-HLTdecision.C'(input, minEvent, maxEvent)'
 * 
 * For help: aliroot -b -q print-RAW-HLTdecision.C
 * </pre>
 *
 * The input file can be a file on Grid like e.g.
 * "alien:///alice/data/2009/LHC09d/000104321/raw/09000104321018.30.root"
 * In that case you need a valid token in order to connect to the Grid.
 * Use 'alien-token-init' from your alien installation.
 *
 * @author Matthias.Richter@ift.uib.no
 * @ingroup alihlt_programs
 */
void print_RAW_HLTdecision(const char* rawFileName,
			   int minEvent=0, int maxEvent=-1)
{
  AliHLTLogging log;
  log.SetGlobalLoggingLevel(0x7c);

  TString strfile=rawFileName;
  if (strfile.Contains("://") && !strfile.Contains("local://")) {
    TGrid::Connect("alien");
  }

  AliRawReader* rawReader=NULL;
  if (rawFileName && rawFileName[0]!=0) rawReader=AliRawReader::Create(rawFileName);
  if (!rawFileName || rawFileName[0]==0 || !rawReader) {
    if (rawFileName && rawFileName[0]!=0)
      cerr << "can not open raw reader " << rawFileName << endl;
    else
      cerr << "print-RAW-HLTdecision.C Print HLT decisions per event of RAW data" << endl;
    cerr << "===============================================================" << endl;
    cerr << "usage: aliroot -b -q -l print-RAW-HLTdecision.C'(rawFileName" << endl;
    cerr << "                                                 minEvent, maxEvent)'" << endl << endl;
    cerr << "  Parameter:" << endl;
    cerr << "       rawFileName      e.g \"raw.root\", \"./\"" << endl;
    cerr << "       minEvent         first event (optional)" << endl;
    cerr << "       maxEvent         last event (optional)" << endl;
    cerr << "===============================================================" << endl;
    return;
  }

  rawReader->RewindEvents();
  int event=0;
  if (!rawReader->NextEvent()) {
    cout << "no events found in " << rawFileName << endl;
    return;
  }

  AliHLTOUT* pHLTOUT=AliHLTOUT::New(rawReader);
  if (!pHLTOUT) {
    cerr << "can not create HLTOUT instance" << endl;
    return;
  }

  do {
    if (minEvent>=0 && event<minEvent) continue;
    cout << "=====================  event " << event << "  ==========================" << endl;
    if (pHLTOUT->Init()<0) {
      cerr << "failed to initialize HLTOUT for event " << event << endl;
      break;
    }
    bool found=false;
    
    // in the original implementation, the GlobalTriggerDecision has been
    // sent with data type kAliHLTDataTypeTObject, thats why we check for
    // both
    if (pHLTOUT->SelectFirstDataBlock(kAliHLTDataTypeGlobalTrigger)>=0 ||
        pHLTOUT->SelectFirstDataBlock(kAliHLTDataTypeTObject)>=0) {
      do {
        TObject* decision = pHLTOUT->GetDataObject();
        if (decision) {
	  if (decision->IsA() == AliHLTGlobalTriggerDecision::Class()) {
	    cout << "HLT Global Trigger: " << decision->GetOption() << "   " << decision->GetTitle() << endl;
	    decision->Print();
	    found=true;
	  }
	  pHLTOUT->ReleaseDataObject(decision);
        }
      } while (!found && pHLTOUT->SelectNextDataBlock());
    }

    if (!found) {
      cout << "   no HLT decision found" << endl;
    }
    pHLTOUT->Reset();
    event++;
  } while (rawReader->NextEvent() && (maxEvent<0 || event<maxEvent));
}

void print_RAW_HLTdecision()
{
  // print usage
  print_RAW_HLTdecision(NULL);
}
 print-RAW-HLTdecision.C:1
 print-RAW-HLTdecision.C:2
 print-RAW-HLTdecision.C:3
 print-RAW-HLTdecision.C:4
 print-RAW-HLTdecision.C:5
 print-RAW-HLTdecision.C:6
 print-RAW-HLTdecision.C:7
 print-RAW-HLTdecision.C:8
 print-RAW-HLTdecision.C:9
 print-RAW-HLTdecision.C:10
 print-RAW-HLTdecision.C:11
 print-RAW-HLTdecision.C:12
 print-RAW-HLTdecision.C:13
 print-RAW-HLTdecision.C:14
 print-RAW-HLTdecision.C:15
 print-RAW-HLTdecision.C:16
 print-RAW-HLTdecision.C:17
 print-RAW-HLTdecision.C:18
 print-RAW-HLTdecision.C:19
 print-RAW-HLTdecision.C:20
 print-RAW-HLTdecision.C:21
 print-RAW-HLTdecision.C:22
 print-RAW-HLTdecision.C:23
 print-RAW-HLTdecision.C:24
 print-RAW-HLTdecision.C:25
 print-RAW-HLTdecision.C:26
 print-RAW-HLTdecision.C:27
 print-RAW-HLTdecision.C:28
 print-RAW-HLTdecision.C:29
 print-RAW-HLTdecision.C:30
 print-RAW-HLTdecision.C:31
 print-RAW-HLTdecision.C:32
 print-RAW-HLTdecision.C:33
 print-RAW-HLTdecision.C:34
 print-RAW-HLTdecision.C:35
 print-RAW-HLTdecision.C:36
 print-RAW-HLTdecision.C:37
 print-RAW-HLTdecision.C:38
 print-RAW-HLTdecision.C:39
 print-RAW-HLTdecision.C:40
 print-RAW-HLTdecision.C:41
 print-RAW-HLTdecision.C:42
 print-RAW-HLTdecision.C:43
 print-RAW-HLTdecision.C:44
 print-RAW-HLTdecision.C:45
 print-RAW-HLTdecision.C:46
 print-RAW-HLTdecision.C:47
 print-RAW-HLTdecision.C:48
 print-RAW-HLTdecision.C:49
 print-RAW-HLTdecision.C:50
 print-RAW-HLTdecision.C:51
 print-RAW-HLTdecision.C:52
 print-RAW-HLTdecision.C:53
 print-RAW-HLTdecision.C:54
 print-RAW-HLTdecision.C:55
 print-RAW-HLTdecision.C:56
 print-RAW-HLTdecision.C:57
 print-RAW-HLTdecision.C:58
 print-RAW-HLTdecision.C:59
 print-RAW-HLTdecision.C:60
 print-RAW-HLTdecision.C:61
 print-RAW-HLTdecision.C:62
 print-RAW-HLTdecision.C:63
 print-RAW-HLTdecision.C:64
 print-RAW-HLTdecision.C:65
 print-RAW-HLTdecision.C:66
 print-RAW-HLTdecision.C:67
 print-RAW-HLTdecision.C:68
 print-RAW-HLTdecision.C:69
 print-RAW-HLTdecision.C:70
 print-RAW-HLTdecision.C:71
 print-RAW-HLTdecision.C:72
 print-RAW-HLTdecision.C:73
 print-RAW-HLTdecision.C:74
 print-RAW-HLTdecision.C:75
 print-RAW-HLTdecision.C:76
 print-RAW-HLTdecision.C:77
 print-RAW-HLTdecision.C:78
 print-RAW-HLTdecision.C:79
 print-RAW-HLTdecision.C:80
 print-RAW-HLTdecision.C:81
 print-RAW-HLTdecision.C:82
 print-RAW-HLTdecision.C:83
 print-RAW-HLTdecision.C:84
 print-RAW-HLTdecision.C:85
 print-RAW-HLTdecision.C:86
 print-RAW-HLTdecision.C:87
 print-RAW-HLTdecision.C:88
 print-RAW-HLTdecision.C:89
 print-RAW-HLTdecision.C:90
 print-RAW-HLTdecision.C:91
 print-RAW-HLTdecision.C:92
 print-RAW-HLTdecision.C:93
 print-RAW-HLTdecision.C:94
 print-RAW-HLTdecision.C:95
 print-RAW-HLTdecision.C:96
 print-RAW-HLTdecision.C:97
 print-RAW-HLTdecision.C:98
 print-RAW-HLTdecision.C:99
 print-RAW-HLTdecision.C:100
 print-RAW-HLTdecision.C:101
 print-RAW-HLTdecision.C:102
 print-RAW-HLTdecision.C:103
 print-RAW-HLTdecision.C:104