ROOT logo
/**
 * @file testCosmicsTrigger.C
 * @brief Test macro for the cosmics trigger
 *
 * Usage:
 * <pre>
 *   aliroot -b -q testCosmicsTrigger.C'("./","HLTesdTree","local://$ALICE_ROOT/OCDB", nOfEvents)' | tee cosmics-trigger.log
 *   aliroot -b -q testCosmicsTrigger.C'("./","esdTree","local://$ALICE_ROOT/OCDB", nOfEvents)' | tee cosmics-trigger.log
 *   aliroot -b -q testCosmicsTrigger.C'("alien:///alice/data/...","HLTesdTree","local://$ALICE_ROOT/OCDB", nOfEvents)' | tee cosmics-trigger.log
 * </pre>
 *
 * The macro takes as input an ESD file, as the component works on ESD tracks. 
 * The user can speficy which tree will be used. 
 *
 * @author Kalliopi Kanaki (Kalliopi.Kanaki@ift.uib.no)
 */

void testCosmicsTrigger(const char *esdfilename,
		        const char *treename,
			const char *cdbURI,
		        int nofEvents=-1
		        )
{
  // check the name of the tree
  TString strtree=treename;
  if (strtree.CompareTo("esdTree")==0) strtree="ESD";
  else if (strtree.CompareTo("HLTesdTree")==0) strtree="HLTESD";
  else {
    cerr << "invalid treename '" << treename << "', supported 'esdTree' and 'HLTesdTree'" << endl;
    return;
  }

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

  // open the ESD file and get the event count
  if (!strfile.EndsWith("/")) strfile+="/";
  strfile+="AliESDs.root";
  TFile* esdfile=TFile::Open(strfile);
  if (!esdfile || esdfile->IsZombie()) {
    cerr << "cannot open file " << strfile << endl;
    return;
  }

  // get number of events
  TTree* pTree=NULL;
  esdfile->GetObject(treename, pTree);
  if (!pTree) {
    cerr << "can not find " << treename << " in file " << strfile << endl;
    return;
  }
  if (pTree->GetEntries()<=0) {
    cerr << "empty tree " << treename << " in file " << strfile << endl;
    return;
  }
  
  AliESDEvent* esd=new AliESDEvent;
  esd->ReadFromTree(pTree);
  pTree->GetEntry(0);

  if (nofEvents<0 || nofEvents>pTree->GetEntries())
    nofEvents=pTree->GetEntries();

  // Set the CDB storage location
  AliCDBManager *man = AliCDBManager::Instance();
  man->SetDefaultStorage(cdbURI);
  man->SetRun(esd->GetRunNumber());
  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/..");      
    }
  }

  //////////////////////////////////////////////////////////////////////////////////////
  //
  // setup the HLT system
  AliHLTSystem *pHLT = AliHLTPluginBase::GetInstance();
  
  gSystem->Load("libANALYSIS");
  gSystem->Load("libANALYSISalice");
  gSystem->Load("libTPCcalib");  
  
  TString arguments, triggerinput;

  // ESD publisher component
  arguments=" -datapath "; arguments+=esdfilename;
  arguments+=" -entrytype "; arguments+=strtree;
  triggerinput="ESD-publisher";

  AliHLTConfiguration esdpublisher(triggerinput.Data(), "ESDMCEventPublisher", "", arguments.Data());

  AliHLTConfiguration cosmicstr("cosmics-trigger","CosmicsTrigger", triggerinput.Data(),"");
  //AliHLTConfiguration globaltriggerconf("global-trigger", "HLTGlobalTrigger", "cosmics-trigger" , "");
    
  // set option for the HLT system
  // arguments
  //  - libraries to be used as plugins
  //  - loglevel=0x79 : Important, Warning, Error, Fatal
  pHLT->ScanOptions("libAliHLTUtil.so libAliHLTMUON.so libAliHLTTRD.so libAliHLTGlobal.so libAliHLTTrigger.so loglevel=0x79");

  pHLT->BuildTaskList("cosmics-trigger");
  //pHLT->BuildTaskList("global-trigger");
  pHLT->Run(nofEvents);
}

void testCosmicsTrigger(){
   cout << "=====================" << endl;
   cout << "  " << endl;
   cout << "Usage: aliroot -b -q testCosmicsTrigger.C\'(\"./\",\"HLTesdTree\",\"local://$ALICE_ROOT/OCDB\", nOfEvents)\' | tee cosmics-trigger.log" << endl;
   cout << "  " << endl;
   cout << "=====================" << endl;


}
 testCosmicsTrigger.C:1
 testCosmicsTrigger.C:2
 testCosmicsTrigger.C:3
 testCosmicsTrigger.C:4
 testCosmicsTrigger.C:5
 testCosmicsTrigger.C:6
 testCosmicsTrigger.C:7
 testCosmicsTrigger.C:8
 testCosmicsTrigger.C:9
 testCosmicsTrigger.C:10
 testCosmicsTrigger.C:11
 testCosmicsTrigger.C:12
 testCosmicsTrigger.C:13
 testCosmicsTrigger.C:14
 testCosmicsTrigger.C:15
 testCosmicsTrigger.C:16
 testCosmicsTrigger.C:17
 testCosmicsTrigger.C:18
 testCosmicsTrigger.C:19
 testCosmicsTrigger.C:20
 testCosmicsTrigger.C:21
 testCosmicsTrigger.C:22
 testCosmicsTrigger.C:23
 testCosmicsTrigger.C:24
 testCosmicsTrigger.C:25
 testCosmicsTrigger.C:26
 testCosmicsTrigger.C:27
 testCosmicsTrigger.C:28
 testCosmicsTrigger.C:29
 testCosmicsTrigger.C:30
 testCosmicsTrigger.C:31
 testCosmicsTrigger.C:32
 testCosmicsTrigger.C:33
 testCosmicsTrigger.C:34
 testCosmicsTrigger.C:35
 testCosmicsTrigger.C:36
 testCosmicsTrigger.C:37
 testCosmicsTrigger.C:38
 testCosmicsTrigger.C:39
 testCosmicsTrigger.C:40
 testCosmicsTrigger.C:41
 testCosmicsTrigger.C:42
 testCosmicsTrigger.C:43
 testCosmicsTrigger.C:44
 testCosmicsTrigger.C:45
 testCosmicsTrigger.C:46
 testCosmicsTrigger.C:47
 testCosmicsTrigger.C:48
 testCosmicsTrigger.C:49
 testCosmicsTrigger.C:50
 testCosmicsTrigger.C:51
 testCosmicsTrigger.C:52
 testCosmicsTrigger.C:53
 testCosmicsTrigger.C:54
 testCosmicsTrigger.C:55
 testCosmicsTrigger.C:56
 testCosmicsTrigger.C:57
 testCosmicsTrigger.C:58
 testCosmicsTrigger.C:59
 testCosmicsTrigger.C:60
 testCosmicsTrigger.C:61
 testCosmicsTrigger.C:62
 testCosmicsTrigger.C:63
 testCosmicsTrigger.C:64
 testCosmicsTrigger.C:65
 testCosmicsTrigger.C:66
 testCosmicsTrigger.C:67
 testCosmicsTrigger.C:68
 testCosmicsTrigger.C:69
 testCosmicsTrigger.C:70
 testCosmicsTrigger.C:71
 testCosmicsTrigger.C:72
 testCosmicsTrigger.C:73
 testCosmicsTrigger.C:74
 testCosmicsTrigger.C:75
 testCosmicsTrigger.C:76
 testCosmicsTrigger.C:77
 testCosmicsTrigger.C:78
 testCosmicsTrigger.C:79
 testCosmicsTrigger.C:80
 testCosmicsTrigger.C:81
 testCosmicsTrigger.C:82
 testCosmicsTrigger.C:83
 testCosmicsTrigger.C:84
 testCosmicsTrigger.C:85
 testCosmicsTrigger.C:86
 testCosmicsTrigger.C:87
 testCosmicsTrigger.C:88
 testCosmicsTrigger.C:89
 testCosmicsTrigger.C:90
 testCosmicsTrigger.C:91
 testCosmicsTrigger.C:92
 testCosmicsTrigger.C:93
 testCosmicsTrigger.C:94
 testCosmicsTrigger.C:95
 testCosmicsTrigger.C:96
 testCosmicsTrigger.C:97
 testCosmicsTrigger.C:98
 testCosmicsTrigger.C:99
 testCosmicsTrigger.C:100
 testCosmicsTrigger.C:101
 testCosmicsTrigger.C:102
 testCosmicsTrigger.C:103
 testCosmicsTrigger.C:104
 testCosmicsTrigger.C:105
 testCosmicsTrigger.C:106
 testCosmicsTrigger.C:107
 testCosmicsTrigger.C:108
 testCosmicsTrigger.C:109
 testCosmicsTrigger.C:110
 testCosmicsTrigger.C:111
 testCosmicsTrigger.C:112
 testCosmicsTrigger.C:113
 testCosmicsTrigger.C:114
 testCosmicsTrigger.C:115
 testCosmicsTrigger.C:116
 testCosmicsTrigger.C:117
 testCosmicsTrigger.C:118
 testCosmicsTrigger.C:119
 testCosmicsTrigger.C:120
 testCosmicsTrigger.C:121
 testCosmicsTrigger.C:122
 testCosmicsTrigger.C:123
 testCosmicsTrigger.C:124
 testCosmicsTrigger.C:125