ROOT logo
/**
 * A script that will run the most simple chain possible. 
 *
 * What is done, depends on a bit mask:
 *
 *  Bit | Job
 *  ----+-----------------------
 *   0  | Make fake hits
 *   1  | Make digits from hits
 *   2  | Make sdigits from hits
 *   3  | Make raw DDL files from digits
 *   4  | Make ESD from raw ddl files
 *   5  | Display the data
 *
 *  So a mask of 0x3f means do everything, while 0x2 means
 *  only make digits from hits, and 0x1F is all but display.
 * 
 */

const char* path = "$ALICE_ROOT/FMD/scripts/";

void
RunAndDisplay(const char* script, bool show, const char* display)
{
  gROOT->Macro(Form("%s/%s", path, script));
  if (show) 
    gSystem->Exec(Form("aliroot -q -l %s/%s &", path, display));
}

void
RunSimpleChain(Int_t what=0x3b)
{
  if (what == 0) { 
    std::cout << "Usage: RunSimpleChain(MASK)\n\n"
	      << "MASK is a bit mask of things to do:\n\n"
	      << "\tBit | Job\n"
	      << "\t----+-----------------------\n"
	      << "\t 0  | Make fake hits\n"
	      << "\t 1  | Make digits from hits\n"
	      << "\t 2  | Make sdigits from hits\n"
	      << "\t 3  | Make raw DDL files from digits\n"
	      << "\t 4  | Make ESD from raw ddl files\n"
	      << "\t 5  | Display the data\n\n"
	      << "So a mask of 0x3f means do everything, while 0x2 means\n"
	      << "only make digits from hits, and 0x1F is all but display.\n"
	      << "\n" << std::endl;
    return;
  }
  Bool_t display = (what & (1 << 5));
  
  if (what & (1 << 0)) { 
    std::cout << "Making fake hits" << std::endl;
    RunAndDisplay("MakeFakeHits.C", display, "PatternHits.C");
  }
  
  if (what & (1 << 1)) { 
    std::cout << "Converting hits to digits" << std::endl;
    RunAndDisplay("Hits2Digits.C", display, "PatternDigits.C");
  }
  
  if (what & (1 << 2)) { 
    std::cout << "Converting hits to summable digits" << std::endl;
    RunAndDisplay("Hits2SDigits.C", display, "PatternSDigits.C");
  }
  
  if (what & (1 << 3)) { 
    std::cout << "Converting digits to raw data" << std::endl;
    gSystem->Exec("rm -rf raw0");
    RunAndDisplay("Digits2Raw.C", false, "");

    std::cout << "Moving ddl files" << std::endl;
    gSystem->mkdir("raw0");
    gSystem->Exec("mv FMD_*.ddl raw0/");
    gSystem->Exec("touch raw0/run0");
    if (display)
      gSystem->Exec(Form("aliroot -q %s/PatternRaw.C\\(\\\"\\\"\\) &", path));
  }
  
  if (what & (1 << 4)) {
    std::cout << "Making ESD from raw data" << std::endl;
    RunAndDisplay("Raw2ESD.C", display, "PatternESD.C");
  }
  
  std::cout << "All done" << std::endl;
}

  
//
// EOF
//
 RunSimpleChain.C:1
 RunSimpleChain.C:2
 RunSimpleChain.C:3
 RunSimpleChain.C:4
 RunSimpleChain.C:5
 RunSimpleChain.C:6
 RunSimpleChain.C:7
 RunSimpleChain.C:8
 RunSimpleChain.C:9
 RunSimpleChain.C:10
 RunSimpleChain.C:11
 RunSimpleChain.C:12
 RunSimpleChain.C:13
 RunSimpleChain.C:14
 RunSimpleChain.C:15
 RunSimpleChain.C:16
 RunSimpleChain.C:17
 RunSimpleChain.C:18
 RunSimpleChain.C:19
 RunSimpleChain.C:20
 RunSimpleChain.C:21
 RunSimpleChain.C:22
 RunSimpleChain.C:23
 RunSimpleChain.C:24
 RunSimpleChain.C:25
 RunSimpleChain.C:26
 RunSimpleChain.C:27
 RunSimpleChain.C:28
 RunSimpleChain.C:29
 RunSimpleChain.C:30
 RunSimpleChain.C:31
 RunSimpleChain.C:32
 RunSimpleChain.C:33
 RunSimpleChain.C:34
 RunSimpleChain.C:35
 RunSimpleChain.C:36
 RunSimpleChain.C:37
 RunSimpleChain.C:38
 RunSimpleChain.C:39
 RunSimpleChain.C:40
 RunSimpleChain.C:41
 RunSimpleChain.C:42
 RunSimpleChain.C:43
 RunSimpleChain.C:44
 RunSimpleChain.C:45
 RunSimpleChain.C:46
 RunSimpleChain.C:47
 RunSimpleChain.C:48
 RunSimpleChain.C:49
 RunSimpleChain.C:50
 RunSimpleChain.C:51
 RunSimpleChain.C:52
 RunSimpleChain.C:53
 RunSimpleChain.C:54
 RunSimpleChain.C:55
 RunSimpleChain.C:56
 RunSimpleChain.C:57
 RunSimpleChain.C:58
 RunSimpleChain.C:59
 RunSimpleChain.C:60
 RunSimpleChain.C:61
 RunSimpleChain.C:62
 RunSimpleChain.C:63
 RunSimpleChain.C:64
 RunSimpleChain.C:65
 RunSimpleChain.C:66
 RunSimpleChain.C:67
 RunSimpleChain.C:68
 RunSimpleChain.C:69
 RunSimpleChain.C:70
 RunSimpleChain.C:71
 RunSimpleChain.C:72
 RunSimpleChain.C:73
 RunSimpleChain.C:74
 RunSimpleChain.C:75
 RunSimpleChain.C:76
 RunSimpleChain.C:77
 RunSimpleChain.C:78
 RunSimpleChain.C:79
 RunSimpleChain.C:80
 RunSimpleChain.C:81
 RunSimpleChain.C:82
 RunSimpleChain.C:83
 RunSimpleChain.C:84
 RunSimpleChain.C:85
 RunSimpleChain.C:86
 RunSimpleChain.C:87
 RunSimpleChain.C:88
 RunSimpleChain.C:89
 RunSimpleChain.C:90
 RunSimpleChain.C:91