ROOT logo
// $Id$
void sampleRawAnalysis();
/**
 * @file sampleRawAnalysis.C
 * @brief Example macro to run the AliHLTSampleRawAnalysisComponent in
 * AliReconstruction.
 *
 * The component subscribes to DDL raw data published by the
 * AliHLTRawReaderPublisherComponent. The macros requires a raw data file
 * and a corresponding GRP entry.
 *
 * <pre>
 * Usage: aliroot -b -q -l \
 *     sampleRawAnalysis.C'("rawfile", "cdb", minEvent, maxEvent)'
 *
 * Examples:
 *     sampleRawAnalysis.C'("raw.root", minEvent, MaxEvent)'
 *     sampleRawAnalysis.C'("./", minEvent, MaxEvent)'
 *     sampleRawAnalysis.C'("alien:///alice/data/2010/.../raw/....root")' 
 *
 * Defaults
 *     cdb="local://$ALICE_ROOT/OCDB" -> take local OCDB from distribution
 *     minEvent=-1   -> no lower event selection
 *     maxEvent=-1   -> no upper event selection
 *
 * </pre>
 *
 * The input file can be a local raw.root file but also a file from the
 * GRID. The separate DDL files generated in simulation can be accessed
 * using AliRawReaderFile by speficying "directory/".
 *
 * Since the macro runs AliReconstruction the OCDB needs to be set up, in
 * particular the GRP entry. If testing with a local OCDB you have to
 * simulate some events and run the macro in the folder of the simulation.
 * Also HLT components configure from objects in the OCDB.
 *
 * Note: You need a valid GRID token, if you want to access files directly
 * from the Grid, use 'alien-token-init' of your alien installation.
 *
 * @author Matthias.Richter@ift.uib.no
 * @ingroup alihlt_tutorial
 */
void sampleRawAnalysis(const char *filename,
		       const char *cdbURI,
		       int minEvent=-1,
		       int maxEvent=-1)
{
  if(!gSystem->AccessPathName("galice.root")){
    cerr << "AliReconstruction on raw data requires to delete galice.root, or run at different place." << endl;
    cerr << "!!! DO NOT DELETE the galice.root of your simulation, but create a subfolder !!!!" << endl;
    return;
  }

  if (gSystem->AccessPathName(filename)) {
    cerr << "can not find file " << filename << endl;
    return;
  }

  // connect to the GRID if we use a file or OCDB from the GRID
  TString struri=cdbURI;
  TString strfile=filename;
  if (struri.BeginsWith("raw://") ||
      strfile.Contains("://") && !strfile.Contains("local://")) {
    TGrid::Connect("alien");
  }

  // Set the CDB storage location
  AliCDBManager * man = AliCDBManager::Instance();
  man->SetDefaultStorage(cdbURI);
  if (struri.BeginsWith("local://")) {
    // set specific storage for GRP entry
    // search in the working directory and one level above, the latter
    // follows the standard simulation setup like e.g. in test/ppbench
    if (!gSystem->AccessPathName("GRP/GRP/Data")) {
      man->SetSpecificStorage("GRP/GRP/Data", "local://$PWD");
    } else if (!gSystem->AccessPathName("../GRP/GRP/Data")) {
      man->SetSpecificStorage("GRP/GRP/Data", "local://$PWD/..");      
    } else {
      cerr << "can not find a GRP entry, please run the macro in the folder" << endl;
      cerr << "of a simulated data sample, or specify a GRID OCDB" << endl;
      sampleRawAnalysis();      
      return;
    }
  }

  //////////////////////////////////////////////////////////////////////////////////////
  //
  // Reconstruction settings
  AliReconstruction rec;

  if (minEvent>=0 || maxEvent>minEvent) {
    if (minEvent<0) minEvent=0;
    if (maxEvent<minEvent) maxEvent=minEvent;
    rec.SetEventRange(minEvent,maxEvent);
  }
  rec.SetRunReconstruction("HLT");
  rec.SetLoadAlignFromCDB(kFALSE);
  rec.SetWriteESDfriend(kFALSE);
  // due to bug ...
  // StopOnError needs to be disabled
  rec.SetStopOnError(kFALSE);
  rec.SetRunVertexFinder(kFALSE);
  rec.SetInput(filename);

  // QA options
  rec.SetRunQA(":") ;
  //rec.SetQARefDefaultStorage("local://$ALICE_ROOT/QAref") ;

  //////////////////////////////////////////////////////////////////////////////////////
  //
  // setup the HLT system
  AliHLTSystem* pHLT=AliHLTPluginBase::GetInstance();

  // define a data publisher configuration
  // arguments:
  //  1) id of the configuartion, later used to refer to this configuration
  //  2) id of the component to run
  //  3) parents, no parents for publisher components
  //  4) optional component arguments
  //              publish link #512, the first link (numbered 0) of SSD
  AliHLTConfiguration publisher("RAW-Publisher", 
				"AliRawReaderPublisher", 
				"", 
				"-minid 512 "
				"-datatype 'DDL_RAW ' 'ISSD' "
				"-dataspec 0x01"
				);

  // define configuration of the SampleRawAnalyis component
  // arguments:
  //  1) id of the configuartion, later used to refer to this configuration
  //  2) id of the component to run
  //  3) parents, here the publisher configuration defined above
  //  4) optional component arguments
  AliHLTConfiguration rawanalysis("RAW-Analysis", 
				  "SampleRawAnalysis", 
				  "RAW-Publisher", 
				  "-mandatory1 test "
				  "-verbose"
				  );

  // set option for the HLT module in AliReconstruction
  // arguments
  //  - ignore-hltout : ignore the HLTOUT payload from the HLT DDLs
  //  - libraries to be used as plugins
  //  - loglevel=0x7c : Important, Info, Warning, Error, Fatal
  //  - chains=RAW-Analysis : chains to be run
  rec.SetOption("HLT",
		"ignore-hltout " 
		"libAliHLTUtil.so libAliHLTSample.so "
		"loglevel=0x7c "
		"chains=RAW-Analysis "
		);

  rec.SetRunPlaneEff(kFALSE);

  // switch off cleanESD
  rec.SetCleanESD(kFALSE);

  AliLog::Flush();
  rec.Run();

}

void sampleRawAnalysis(const char *filename,
		       int minEvent=-1,
		       int maxEvent=-1)
{
  sampleRawAnalysis(filename, "local://$ALICE_ROOT/OCDB", minEvent, maxEvent);
}

void sampleRawAnalysis()
{
  cout << "sampleRawAnalysis: Run HLT component 'SampleRawAnalyis' in AliReconstruction" << endl;
  cout << " Usage: aliroot -b -q -l \\" << endl;
  cout << "     sampleRawAnalysis.C'(\"file\", \"cdb\", minEvent, maxEvent)'" << endl;
  cout << "" << endl;
  cout << " Examples:" << endl;
  cout << "     sampleRawAnalysis.C'(\"raw.root\", minEvent, MaxEvent)'" << endl;
  cout << "     sampleRawAnalysis.C'(\"./\", minEvent, MaxEvent)'" << endl;
  cout << "     sampleRawAnalysis.C'(\"alien:///alice/data/2010/.../raw/....root\")' " << endl;
  cout << "" << endl;
  cout << " Defaults" << endl;
  cout << "     cdb=\"local://$ALICE_ROOT/OCDB\"  -> take local OCDB" << endl;
  cout << "     minEvent=-1   -> no lower event selection" << endl;
  cout << "     maxEvent=-1   -> no upper event selection" << endl;
}
 sampleRawAnalysis.C:1
 sampleRawAnalysis.C:2
 sampleRawAnalysis.C:3
 sampleRawAnalysis.C:4
 sampleRawAnalysis.C:5
 sampleRawAnalysis.C:6
 sampleRawAnalysis.C:7
 sampleRawAnalysis.C:8
 sampleRawAnalysis.C:9
 sampleRawAnalysis.C:10
 sampleRawAnalysis.C:11
 sampleRawAnalysis.C:12
 sampleRawAnalysis.C:13
 sampleRawAnalysis.C:14
 sampleRawAnalysis.C:15
 sampleRawAnalysis.C:16
 sampleRawAnalysis.C:17
 sampleRawAnalysis.C:18
 sampleRawAnalysis.C:19
 sampleRawAnalysis.C:20
 sampleRawAnalysis.C:21
 sampleRawAnalysis.C:22
 sampleRawAnalysis.C:23
 sampleRawAnalysis.C:24
 sampleRawAnalysis.C:25
 sampleRawAnalysis.C:26
 sampleRawAnalysis.C:27
 sampleRawAnalysis.C:28
 sampleRawAnalysis.C:29
 sampleRawAnalysis.C:30
 sampleRawAnalysis.C:31
 sampleRawAnalysis.C:32
 sampleRawAnalysis.C:33
 sampleRawAnalysis.C:34
 sampleRawAnalysis.C:35
 sampleRawAnalysis.C:36
 sampleRawAnalysis.C:37
 sampleRawAnalysis.C:38
 sampleRawAnalysis.C:39
 sampleRawAnalysis.C:40
 sampleRawAnalysis.C:41
 sampleRawAnalysis.C:42
 sampleRawAnalysis.C:43
 sampleRawAnalysis.C:44
 sampleRawAnalysis.C:45
 sampleRawAnalysis.C:46
 sampleRawAnalysis.C:47
 sampleRawAnalysis.C:48
 sampleRawAnalysis.C:49
 sampleRawAnalysis.C:50
 sampleRawAnalysis.C:51
 sampleRawAnalysis.C:52
 sampleRawAnalysis.C:53
 sampleRawAnalysis.C:54
 sampleRawAnalysis.C:55
 sampleRawAnalysis.C:56
 sampleRawAnalysis.C:57
 sampleRawAnalysis.C:58
 sampleRawAnalysis.C:59
 sampleRawAnalysis.C:60
 sampleRawAnalysis.C:61
 sampleRawAnalysis.C:62
 sampleRawAnalysis.C:63
 sampleRawAnalysis.C:64
 sampleRawAnalysis.C:65
 sampleRawAnalysis.C:66
 sampleRawAnalysis.C:67
 sampleRawAnalysis.C:68
 sampleRawAnalysis.C:69
 sampleRawAnalysis.C:70
 sampleRawAnalysis.C:71
 sampleRawAnalysis.C:72
 sampleRawAnalysis.C:73
 sampleRawAnalysis.C:74
 sampleRawAnalysis.C:75
 sampleRawAnalysis.C:76
 sampleRawAnalysis.C:77
 sampleRawAnalysis.C:78
 sampleRawAnalysis.C:79
 sampleRawAnalysis.C:80
 sampleRawAnalysis.C:81
 sampleRawAnalysis.C:82
 sampleRawAnalysis.C:83
 sampleRawAnalysis.C:84
 sampleRawAnalysis.C:85
 sampleRawAnalysis.C:86
 sampleRawAnalysis.C:87
 sampleRawAnalysis.C:88
 sampleRawAnalysis.C:89
 sampleRawAnalysis.C:90
 sampleRawAnalysis.C:91
 sampleRawAnalysis.C:92
 sampleRawAnalysis.C:93
 sampleRawAnalysis.C:94
 sampleRawAnalysis.C:95
 sampleRawAnalysis.C:96
 sampleRawAnalysis.C:97
 sampleRawAnalysis.C:98
 sampleRawAnalysis.C:99
 sampleRawAnalysis.C:100
 sampleRawAnalysis.C:101
 sampleRawAnalysis.C:102
 sampleRawAnalysis.C:103
 sampleRawAnalysis.C:104
 sampleRawAnalysis.C:105
 sampleRawAnalysis.C:106
 sampleRawAnalysis.C:107
 sampleRawAnalysis.C:108
 sampleRawAnalysis.C:109
 sampleRawAnalysis.C:110
 sampleRawAnalysis.C:111
 sampleRawAnalysis.C:112
 sampleRawAnalysis.C:113
 sampleRawAnalysis.C:114
 sampleRawAnalysis.C:115
 sampleRawAnalysis.C:116
 sampleRawAnalysis.C:117
 sampleRawAnalysis.C:118
 sampleRawAnalysis.C:119
 sampleRawAnalysis.C:120
 sampleRawAnalysis.C:121
 sampleRawAnalysis.C:122
 sampleRawAnalysis.C:123
 sampleRawAnalysis.C:124
 sampleRawAnalysis.C:125
 sampleRawAnalysis.C:126
 sampleRawAnalysis.C:127
 sampleRawAnalysis.C:128
 sampleRawAnalysis.C:129
 sampleRawAnalysis.C:130
 sampleRawAnalysis.C:131
 sampleRawAnalysis.C:132
 sampleRawAnalysis.C:133
 sampleRawAnalysis.C:134
 sampleRawAnalysis.C:135
 sampleRawAnalysis.C:136
 sampleRawAnalysis.C:137
 sampleRawAnalysis.C:138
 sampleRawAnalysis.C:139
 sampleRawAnalysis.C:140
 sampleRawAnalysis.C:141
 sampleRawAnalysis.C:142
 sampleRawAnalysis.C:143
 sampleRawAnalysis.C:144
 sampleRawAnalysis.C:145
 sampleRawAnalysis.C:146
 sampleRawAnalysis.C:147
 sampleRawAnalysis.C:148
 sampleRawAnalysis.C:149
 sampleRawAnalysis.C:150
 sampleRawAnalysis.C:151
 sampleRawAnalysis.C:152
 sampleRawAnalysis.C:153
 sampleRawAnalysis.C:154
 sampleRawAnalysis.C:155
 sampleRawAnalysis.C:156
 sampleRawAnalysis.C:157
 sampleRawAnalysis.C:158
 sampleRawAnalysis.C:159
 sampleRawAnalysis.C:160
 sampleRawAnalysis.C:161
 sampleRawAnalysis.C:162
 sampleRawAnalysis.C:163
 sampleRawAnalysis.C:164
 sampleRawAnalysis.C:165
 sampleRawAnalysis.C:166
 sampleRawAnalysis.C:167
 sampleRawAnalysis.C:168
 sampleRawAnalysis.C:169
 sampleRawAnalysis.C:170
 sampleRawAnalysis.C:171
 sampleRawAnalysis.C:172
 sampleRawAnalysis.C:173
 sampleRawAnalysis.C:174
 sampleRawAnalysis.C:175
 sampleRawAnalysis.C:176
 sampleRawAnalysis.C:177
 sampleRawAnalysis.C:178
 sampleRawAnalysis.C:179
 sampleRawAnalysis.C:180
 sampleRawAnalysis.C:181
 sampleRawAnalysis.C:182
 sampleRawAnalysis.C:183
 sampleRawAnalysis.C:184
 sampleRawAnalysis.C:185
 sampleRawAnalysis.C:186
 sampleRawAnalysis.C:187
 sampleRawAnalysis.C:188