ROOT logo
//____________________________________________________________________
//
// $Id$
//
// Script that extracts the medium numbers corresponding to each
// registered detector.
//
// Use the script `Compile.C' to compile this class using ACLic. 
//
/** @file    MediaTable.C
    @author  Christian Holm Christensen <cholm@nbi.dk>
    @date    Wed Dec 27 14:25:11 2006
    @brief   Script to make a file with a list of medium numbers for
    all active detectors.   
*/
/** Script to make a file with a list of medium numbers for all active
    detectors.  This should be executed in the same process as the one
    that makes the @c galice.root file.  For example
    @code 
    void 
    Simulate()
    {
      AliSimulation sim;
      AliLog::SetModuleDebugLevel("FMD", 1);
      sim.SetConfigFile("$(ALICE_ROOT)/FMD/Config.C");
      // sim.SetMakeSDigits("FMD");
      sim.SetMakeDigits("FMD ITS VZERO T0"); 
      sim.SetWriteRawData("FMD"); 
      gROOT->Macro("$(ALICE_ROOT)/FMD/scripts/MediaTable.C");
      TStopwatch w; 
      w.Start(); 
      sim.Run(1);  
      w.Stop(); 
      w.Print(); 
    }
    @endcode 
    It can also be executed after the fact, if one make sure to use
    the same configuration file as the one used for the simulation.
    For example 
    @verbatim 
    Root> gAlice->Init("$(ALICE_ROOT)/FMD/Config.C");
    Root> .x $ALICE_ROOT/FMD/scripts/MediaTable.C 
    Root> .q
    @endverbatim 
    The idea is to use the generated file to track where particles are
    produced in the simulation.  This is needed to do background
    studies in the FMD.  The file written contains a @c TObjArray of
    @c TObjString objects.  The @c TObjString objects has the name of
    the detector corresponding to the medium Id that the object is at
    in the array.  To read the file, do for example: 
    @code 
    TFile*      file   = TFile::Open("mediatable.root", "READ");
    TObjArray*  array  = (TObjArray*)(file->Get("mediatable"));
    Int_t       n      = array->GetEntries();
    TObjString* l      = 0;
    Int_t       min = 0;
    Int_t       j   = 0;
    for (j = 0; j < n; j++) {
      TObjString* s = static_cast<TObjString*>(array->At(j));
      if (!l || s->Compare(l) != 0) {
        if (l) 
	  std::cout << l->GetName() << "\t" << min 
                    << "\t" << j - 1 << std::endl;
        min = j;
        l = s;
      }
    }
    std::cout << l->GetName() << "\t" << min << "\t" << j << std::endl;
    file->Close();    
    @endcode 
    See also the script @c BackgroundStudy.C for more on how this is
    used in the FMD collaboration.   
*/
//____________________________________________________________________
void 
MediaTable()
{
  MediaMap m;
  TFile*     file   = TFile::Open("mediatable.root", "RECREATE");
  TObjArray* media  = gAlice->Modules();
  AliModule* module = 0;
  TIter next(media);
  TObjArray* array = new TObjArray(media->GetEntries());
  while ((module = static_cast<AliModule*>(next()))) {
    Int_t low  = module->LoMedium();
    Int_t high = module->HiMedium();
    for (Int_t j = low; j <=high; j++) {
      TObjString* o = new TObjString(module->GetName());
      std::cout << "Adding " << j << ":\t" << o->GetName() << std::endl;
      array->AddAtAndExpand(o, j);
    }
  }
  array->Write("mediatable", TObject::kSingleKey);
  file->Write();
  file->Close();
}

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