ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */

/// \ingroup macros
/// \file runSimulation.C
/// \brief Macro for running simulation
///
/// Macro extracted from the MUON test script
///
/// \author Laurent Aphecetche

#if !defined(__CINT__) || defined(__MAKECINT__)
#include "AliCDBManager.h"
#include "AliSimulation.h"
#include "AliRun.h"
#include "AliHeader.h"
#include <TRandom.h>
#include <Riostream.h>
#endif

void runSimulation(int seed, 
                   int nevents, 
                   const char* config,
                   const char* embedwith,
                   int runnumber)
{ 
// Uncoment following lines to run simulation with local residual mis-alignment
// (generated via MUONGenerateGeometryData.C macro)
// AliCDBManager* man = AliCDBManager::Instance();
// man->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
// man->SetSpecificStorage("MUON/Align/Data","local://$ALICE_ROOT/OCDB/MUON/ResMisAlignCDB");

  AliSimulation MuonSim(config);
  
  if ( strlen(embedwith) > 0 )
  {
    // setups specific to embedding
    
    gAlice->SetConfigFunction("Config(\"\", \"param\", \"AliMUONDigitStoreV2S\",kTRUE);");
    
    // get the run number from real data
    
    AliRunLoader* runLoader = AliRunLoader::Open(embedwith,"titi");
    if (runLoader == 0x0) 
    {
      cerr << Form("Cannot open file %s",embedwith) << endl;    
      return;
    }
    
    runLoader->LoadHeader();
    
    if ( ! runLoader->GetHeader() ) {
      cerr << "Cannot load header." << endl;   
      return;
    }
    else {
      Int_t runNumber = runLoader->GetHeader()->GetRun();
      MuonSim.SetRunNumber(runNumber);
      cout << Form("***** RUN NUMBER SET TO %09d ACCORDING TO %s ",runNumber,embedwith) << endl;
    }  
    runLoader->UnloadHeader(); 
    delete runLoader;
    
    cout << "***** EMBEDDING MODE : USING RAW OCDB" << endl;
    AliCDBManager::Instance()->SetDefaultStorage("raw://");
    AliCDBManager::Instance()->SetSpecificStorage("local://$ALICE_ROOT/OCDB","MUON/Align/Data");
    
  }
  else if ( runnumber > 0 )
  {
    // simulation with anchor run

    cout << "***** ANCHOR RUN MODE : USING RAW OCDB AS MUCH AS POSSIBLE" << endl;
    cout << "*****                   AND TAKING VERTEX FROM OCDB IF AVAILABLE" << endl;
  
    // Last parameter of Config.C indicates we're doing realistic simulations, so we NEED
    // the ITS in the geometry
    gAlice->SetConfigFunction("Config(\"\", \"param\", \"AliMUONDigitStoreV2S\",kFALSE,kTRUE);");

    AliCDBManager::Instance()->SetDefaultStorage("raw://");
    // use something like : "alien://folder=/alice/data/2011/OCDB?cacheFold=/Users/laurent/OCDBcache" instead of "raw://"
    // if getting slow/problematic accesses to OCDB...
        
    AliCDBManager::Instance()->SetSpecificStorage("MUON/Align/Data","alien://folder=/alice/cern.ch/user/j/jcastill/LHC10hMisAlignCDB");
    
    MuonSim.SetRunNumber(runnumber);
    
    MuonSim.UseVertexFromCDB();
  }
  else
  {
    gAlice->SetConfigFunction("Config(\"\", \"param\", \"AliMUONDigitStoreV2S\",kFALSE);");    
  }
  
  MuonSim.SetSeed(seed);
  MuonSim.SetTriggerConfig("MUON");
  MuonSim.SetWriteRawData("MUON ","raw.root",kTRUE);

  MuonSim.SetMakeSDigits("MUON");
  MuonSim.SetMakeDigits("MUON ITS"); // ITS needed to propagate the simulated vertex
  MuonSim.SetMakeDigitsFromHits("ITS"); // ITS needed to propagate the simulated vertex

  MuonSim.SetRunHLT("libAliHLTMUON.so chains=dHLT-sim");

  MuonSim.SetRunQA("MUON:ALL");
  
  if ( strlen(embedwith) > 0 ) 
  {
    MuonSim.MergeWith(embedwith);
  }
  
  MuonSim.Run(nevents);
  //gObjectTable->Print();

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