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 genTestConfig.C
/// \brief Configuration macro for event generator 
/// for MUON spectrometer Monte Carlo simulation

Float_t EtaToTheta(Float_t arg);

AliGenerator* genConfig(char option[6]="param")
{
  cout << "Running genTestConfig.C ... " << endl;

  //=======================================================================
  // ******* GEANT STEERING parameters FOR ALICE SIMULATION *******
  if ( gMC ) {
    gMC->SetProcess("DCAY",1);
    gMC->SetProcess("PAIR",1);
    gMC->SetProcess("COMP",1);
    gMC->SetProcess("PHOT",1);
    gMC->SetProcess("PFIS",0);
    gMC->SetProcess("DRAY",0);
    gMC->SetProcess("ANNI",1);
    gMC->SetProcess("BREM",1);
    gMC->SetProcess("MUNU",1);
    gMC->SetProcess("CKOV",1);
    gMC->SetProcess("HADR",1);
    gMC->SetProcess("LOSS",2);
    gMC->SetProcess("MULS",1);
    gMC->SetProcess("RAYL",1);
    Float_t cut = 1.e-3;        // 1MeV cut by default
    Float_t tofmax = 1.e10;
    gMC->SetCut("CUTGAM", cut);
    gMC->SetCut("CUTELE", cut);
    gMC->SetCut("CUTNEU", cut);
    gMC->SetCut("CUTHAD", cut);
    gMC->SetCut("CUTMUO", cut);
    gMC->SetCut("BCUTE",  cut); 
    gMC->SetCut("BCUTM",  cut); 
    gMC->SetCut("DCUTE",  cut); 
    gMC->SetCut("DCUTM",  cut); 
    gMC->SetCut("PPCUTM", cut);
    gMC->SetCut("TOFMAX", tofmax); 
  }

  // Set External decayer
  TVirtualMCDecayer *decayer = new AliDecayerPythia();
  decayer->SetForceDecay(kAll);
  decayer->Init();
  if ( gMC ) gMC->SetExternalDecayer(decayer);
  
  //=======================================================================
  // Examples of generators. Only option param is sistematically tested
  if (!strcmp(option,"box")) {
    AliGenBox * gener = new AliGenBox(1);
    gener->SetMomentumRange(20.,20.1);
    gener->SetPhiRange(0., 360.);         
    gener->SetThetaRange(171.000,178.001);
    gener->SetPart(kMuonMinus);           // Muons
    gener->SetOrigin(0.,0., 0.);  //vertex position
    gener->SetSigma(0.0, 0.0, 0.0);         //Sigma in (X,Y,Z) (cm) on IP position
  }
  if (!strcmp(option,"gun")) {
    AliGenFixed *gener = new AliGenFixed(1);
    gener->SetMomentum(10);
    gener->SetPhiRange(0.);
    gener->SetThetaRange(0.);
    gener->SetOrigin(30,30,-1200);//vertex position
    gener->SetPart(kMuonMinus);          //GEANT particle type  13 is muons
  }
  if (!strcmp(option,"scan")) {
    AliGenScan *gener = new AliGenScan(-1);
    gener->SetMomentumRange(10,10);
    gener->SetPhiRange(0, 0);
    gener->SetThetaRange(-180, -180);
    //vertex position
    //gener->SetSigma(1,1,0);           //Sigma in (X,Y,Z) (cm) on IP position
    gener->SetPart(kRootino); 
    gener->SetRange(100, -300., 300., 100, -300., 300., 1, 2000, 2000);
  }  
  if (!strcmp(option,"param")) {
    AliGenParam *gener = new AliGenParam(1, AliGenMUONlib::kUpsilon);
    gener->SetMomentumRange(0,999);
    gener->SetPtRange(0,100.);
    gener->SetPhiRange(0., 360.);
    gener->SetCutOnChild(1);
    gener->SetChildPhiRange(0.,360.);
    gener->SetChildThetaRange(171.0,178.0);
    gener->SetOrigin(0,0,0);          //vertex position    gener->SetSigma(0,0,0);           //Sigma in (X,Y,Z) (cm) on IP position
    gener->SetForceDecay(kDiMuon);
    gener->SetTrackingFlag(1);
    gener->Init();
  }
  if (!strcmp(option,"paramJpsi")) {
    AliGenParam *gener = new AliGenParam(1, AliGenMUONlib::kJpsi);
    gener->SetMomentumRange(0,999);
    gener->SetPtRange(0,100.);
    gener->SetPhiRange(0., 360.);
    gener->SetCutOnChild(1);
    gener->SetChildPhiRange(0.,360.);
    gener->SetChildThetaRange(171.0,178.0);
    gener->SetOrigin(0,0,0);
    gener->SetForceDecay(kDiMuon);
    gener->SetTrackingFlag(1);
    gener->Init();
  }
  if (!strcmp(option,"hijing")) { //Hijing generator from ConfigPPR in macros
    AliGenHijing *gener = new AliGenHijing(-1);
    // centre of mass energy 
    gener->SetEnergyCMS(5500.);
    // reference frame
    gener->SetReferenceFrame("CMS");
    // projectile
    gener->SetProjectile("A", 208, 82);
    gener->SetTarget    ("A", 208, 82);
    // tell hijing to keep the full parent child chain
    gener->KeepFullEvent();
    // enable jet quenching
    gener->SetJetQuenching(1);
    // enable shadowing
    gener->SetShadowing(1);
    // neutral pion and heavy particle decays switched off
    gener->SetDecaysOff(1);
    // Don't track spectators
    gener->SetSpectators(0);
    // kinematic selection
    gener->SetSelectAll(0);
    // impact parameter range
    gener->SetImpactParameterRange(0., 5.); // 0. - 5. fm corresponds to ~10% most central
    gener->Init();
  }
  if (!strcmp(option,"muoncocktail")) { // Muon cocktail for PbPb
    AliGenMUONCocktail * gener = new AliGenMUONCocktail();
    gener->SetPtRange(1.,100.);       // Transverse momentum range  
    gener->SetPhiRange(0.,360.);    // Azimuthal angle range 
    gener->SetYRange(-4.0,-2.5);
    gener->SetMuonPtCut(0.5);
    gener->SetMuonThetaCut(171.,178.);
    gener->SetMuonMultiplicity(2);
    gener->SetImpactParameterRange(0.,5.); // 10% most centra PbPb collisions
    gener->SetVertexSmear(kPerTrack);  
    gener->SetOrigin(0,0,0);        // Vertex position
    gener->SetSigma(0,0,0.0);       // Sigma in (X,Y,Z) (cm) on IP position
    gener->Init();
  }  
  return gener;
  
  cout << "Running genGunConfig.C finished ... " << endl;
}

Float_t EtaToTheta(Float_t arg){
  return (180./TMath::Pi())*2.*atan(exp(-arg));
}
 genTestConfig.C:1
 genTestConfig.C:2
 genTestConfig.C:3
 genTestConfig.C:4
 genTestConfig.C:5
 genTestConfig.C:6
 genTestConfig.C:7
 genTestConfig.C:8
 genTestConfig.C:9
 genTestConfig.C:10
 genTestConfig.C:11
 genTestConfig.C:12
 genTestConfig.C:13
 genTestConfig.C:14
 genTestConfig.C:15
 genTestConfig.C:16
 genTestConfig.C:17
 genTestConfig.C:18
 genTestConfig.C:19
 genTestConfig.C:20
 genTestConfig.C:21
 genTestConfig.C:22
 genTestConfig.C:23
 genTestConfig.C:24
 genTestConfig.C:25
 genTestConfig.C:26
 genTestConfig.C:27
 genTestConfig.C:28
 genTestConfig.C:29
 genTestConfig.C:30
 genTestConfig.C:31
 genTestConfig.C:32
 genTestConfig.C:33
 genTestConfig.C:34
 genTestConfig.C:35
 genTestConfig.C:36
 genTestConfig.C:37
 genTestConfig.C:38
 genTestConfig.C:39
 genTestConfig.C:40
 genTestConfig.C:41
 genTestConfig.C:42
 genTestConfig.C:43
 genTestConfig.C:44
 genTestConfig.C:45
 genTestConfig.C:46
 genTestConfig.C:47
 genTestConfig.C:48
 genTestConfig.C:49
 genTestConfig.C:50
 genTestConfig.C:51
 genTestConfig.C:52
 genTestConfig.C:53
 genTestConfig.C:54
 genTestConfig.C:55
 genTestConfig.C:56
 genTestConfig.C:57
 genTestConfig.C:58
 genTestConfig.C:59
 genTestConfig.C:60
 genTestConfig.C:61
 genTestConfig.C:62
 genTestConfig.C:63
 genTestConfig.C:64
 genTestConfig.C:65
 genTestConfig.C:66
 genTestConfig.C:67
 genTestConfig.C:68
 genTestConfig.C:69
 genTestConfig.C:70
 genTestConfig.C:71
 genTestConfig.C:72
 genTestConfig.C:73
 genTestConfig.C:74
 genTestConfig.C:75
 genTestConfig.C:76
 genTestConfig.C:77
 genTestConfig.C:78
 genTestConfig.C:79
 genTestConfig.C:80
 genTestConfig.C:81
 genTestConfig.C:82
 genTestConfig.C:83
 genTestConfig.C:84
 genTestConfig.C:85
 genTestConfig.C:86
 genTestConfig.C:87
 genTestConfig.C:88
 genTestConfig.C:89
 genTestConfig.C:90
 genTestConfig.C:91
 genTestConfig.C:92
 genTestConfig.C:93
 genTestConfig.C:94
 genTestConfig.C:95
 genTestConfig.C:96
 genTestConfig.C:97
 genTestConfig.C:98
 genTestConfig.C:99
 genTestConfig.C:100
 genTestConfig.C:101
 genTestConfig.C:102
 genTestConfig.C:103
 genTestConfig.C:104
 genTestConfig.C:105
 genTestConfig.C:106
 genTestConfig.C:107
 genTestConfig.C:108
 genTestConfig.C:109
 genTestConfig.C:110
 genTestConfig.C:111
 genTestConfig.C:112
 genTestConfig.C:113
 genTestConfig.C:114
 genTestConfig.C:115
 genTestConfig.C:116
 genTestConfig.C:117
 genTestConfig.C:118
 genTestConfig.C:119
 genTestConfig.C:120
 genTestConfig.C:121
 genTestConfig.C:122
 genTestConfig.C:123
 genTestConfig.C:124
 genTestConfig.C:125
 genTestConfig.C:126
 genTestConfig.C:127
 genTestConfig.C:128
 genTestConfig.C:129
 genTestConfig.C:130
 genTestConfig.C:131
 genTestConfig.C:132
 genTestConfig.C:133
 genTestConfig.C:134
 genTestConfig.C:135
 genTestConfig.C:136
 genTestConfig.C:137
 genTestConfig.C:138
 genTestConfig.C:139
 genTestConfig.C:140
 genTestConfig.C:141
 genTestConfig.C:142
 genTestConfig.C:143
 genTestConfig.C:144
 genTestConfig.C:145
 genTestConfig.C:146
 genTestConfig.C:147
 genTestConfig.C:148
 genTestConfig.C:149
 genTestConfig.C:150
 genTestConfig.C:151
 genTestConfig.C:152
 genTestConfig.C:153
 genTestConfig.C:154
 genTestConfig.C:155
 genTestConfig.C:156
 genTestConfig.C:157
 genTestConfig.C:158
 genTestConfig.C:159
 genTestConfig.C:160
 genTestConfig.C:161
 genTestConfig.C:162
 genTestConfig.C:163
 genTestConfig.C:164
 genTestConfig.C:165
 genTestConfig.C:166
 genTestConfig.C:167
 genTestConfig.C:168
 genTestConfig.C:169