]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MUON/READMEsim.txt
Removing obsolete class (Laurent)
[u/mrichter/AliRoot.git] / MUON / READMEsim.txt
CommitLineData
518eb852 1// $Id$
50837721 2
91509ec6 3/*! \page README_sim Simulation
518eb852 4
91509ec6 5The simulation encompasses the following tasks :
d55fa8e9 6
91509ec6 7- Generation of MC particles (the kinematics of the event ends up in the TreeK
8 of Kinematics#.root)
9
10- Tracking particles through the detector using
11the Virtual Monte Carlo, producing AliMUONHit objects, that end up in
12 the TreeH of MUON.Hits#.root file(s). This part is steered by AliMUON and its child
13AliMUONv1 classes.
6b1e4b22 14
91509ec6 15- Converting MC hits into AliMUONVDigit, called SDigits, that end up in the TreeS
16 of the MUON.SDigits#.root file(s). A S(ummable)Digit is a pad with its associated
17charge, but no noise or electronics response function applied. Steered by AliMUONSDigitizerV2 class.
d55fa8e9 18
91509ec6 19- Converting SDigits into Digits, by applying electronics calibrations. Actually, we de-calibrate
20 the digits at this stage, by adding a pedestal and dividing by a gain, more or less. Steered
21 by AliMUONDigitizerV3 class. Digits end up in TreeD of MUON.Digits#.root file(s). In addition,
22 for the trigger, we create AliMUONLocalTrigger, AliMUONRegionalTrigger and AliMUONGlobalTrigger objects
23at this stage, that ends up in TreeD as well.
518eb852 24
91509ec6 25- Convert the Digits into RAW data, in a format that should be exactly the same as real data from the
26DAQ. Performed by AliMUONRawWriter.
518eb852 27
91509ec6 28From there on, the reconstruction can proceed, in the very same way for real or simulated data,
29 as long as they are in RAW format.
7f42a16f 30
91509ec6 31\section sim_s1 How to run a MUON generation
518eb852 32
d55fa8e9 33You only need to run the simulation part of the test script
34AlirootRun_MUONtest.sh
88cb7938 35
b3ba6823 36
91509ec6 37\section sim_s2 Tracking parameters, cuts, energy loss and physics processes
518eb852 38
02d8f072 39Tracking parameters in MUON are automatically defined by GEANT
40MUON takes the default values of CUTs and physics processes
41defined by the Config files, except for the gas mixture medium
42of the tracking chambers. The CUT's and physics processes of
43the gas mixture medium is then defined in the galice.cuts file
44in the data directory. In particular ILOSS parameter MUST be
45equal unity (1) in order simulate a realistic energy loss
46distribution (mean value and fluctuations) in the active gas.
a88eb0d0 47
91509ec6 48\section sim_s3 Tracking of particle in the magnetic field
518eb852 49
27d27e68 50GEANT has two integration methods for tracking charged particles in the
a88eb0d0 51magnetic field: HELIX et RKUTA.
52HELIX is faster and works well if the gradient of magnetic
53field is small.
54For MUON, HELIX is a not a good approximation and we must
55use RKUTA to get the optimal mass resolution of the
56spectrometer. The choice of HELIX or RKUTA is done in the
57config file when the magnetic field is defined:
518eb852 58<pre>
27d27e68 59 TGeoGlobalMagField::Instance()
60 ->SetField(new AliMagF("Maps","Maps", INTEG, FACTOR_SOL, FACTOR_DIP, MAXB, AliMagF::k5kG));
518eb852 61</pre>
27d27e68 62INTEG must be 1 for RKUTA and 2 for HELIX (the default value for aliroot is 2 (HELIX)).
63FACTOR_SOL, FACTOR_DIP allow you to set the multiplicative factor for solenoid
64and dipole, respectively; just putting FACTOR_SOL=0 or FACTOR_DIP=0 will set the
65magnetic field for solenoid or dipole to 0. Default values are 1.0, 1.0.
66MAXB is the maximum magnetic field which default value is 10.T
2b32c661 67
e6168aff 68\section sim_s4 Tailing effect
69
70The control to turn on/off the parametrized tailing effect:
71<pre>
72AliMUON::SetTailEffect(Bool_t),
73</pre>
74
75The parameter to tune increase/decrease the tailing effect is kept inside,
76AliMUONResponseV0::DisIntegrate(). This parameter is an integer number
77(excluding zero and four), the higher the value is the less is the tailing
78effect:
79<pre>
80Int_t para = 5;
81</pre>
82Zero is excluded because it gives straight line transformation, and four
83is excluded because the AliRoot simulation chain spends VERY VERY long
84time in AliMUONResponseV0::DisIntegrate method, which reason was not yet
85understood. The parameter for 1, 2, 3, 5, 6, 7, 8, 9, 10 were checked with
86no slowing down problem, however parameters greater than 6 give almost no
87tailing effect since they basically correspond to higher order polynomial
88transform.
89
90
91\section sim_s5 MUON cocktail generator
518eb852 92
f4f795ed 93There is a MUON cocktail generator of the muon sources in the
94EVGEN directory. This class derives from AliGenCocktail.
95In the init of this class I have filled the cocktail with
96the muon sources: J/Psi, Upsilon, Open Charm, Open Beauty,
97Pion, Kaons. The code needs only the production cross section
98at 4pi (for the moment this values are in the code since I
99prefere them do not be modified), and the code calculates the
100rate of particles in the acceptance, making the scaling based
101on the number of collisions for the hard probes and on the
102number of participants for soft sources: Pions and Kaons.
103
104In the Genereate of this class all entries in the cocktail
105are called and we define a "primordial trigger" with requires
106a minimum number of muons above a Pt cut in the required acceptance.
107In order to normalized to the real number of simulated events,
108there are 2 data members in the class fNsuceeded adn fNGenerate
109which tell us what is the biais source.
110
111Enclose an example to use this generator:
518eb852 112<pre>
f4f795ed 113AliGenMUONCocktail * gener = new AliGenMUONCocktail();
114gener->SetPtRange(1.,100.); // Transverse momentum range
115gener->SetPhiRange(0.,360.); // Azimuthal angle range
116gener->SetYRange(-4.0,-2.4);
117gener->SetMuonPtCut(1.);
118gener->SetMuonThetaCut(171.,178.);
119gener->SetMuonMultiplicity(2);
35e21dec 120gener->SetImpactParameterRange(0.,5.); // 10% most centra PbPb collisions
f4f795ed 121gener->SetVertexSmear(kPerTrack);
122gener->SetOrigin(0,0,0); // Vertex position
123gener->SetSigma(0,0,0.0); // Sigma in (X,Y,Z) (cm) on IP position
124gener->Init();
518eb852 125</pre>
f4f795ed 126
e6168aff 127\section sim_s6 How to simulate events with misaligned geometry in local CDB
d228b279 128
129If you want to use a misaligned geometry to simulate some
130events you can use a local CDB. For this need to follow
131the next steps:
132
133- Generate misaligned data in local CDB.
134You can use MUONGenerateGeometryData.C as described above in
135the corresponding section. Let's assume you used the default
136residual misalignment settings, then you have a local CDB in
137your working directory called ResMisAlignCDB containing
138misalignement data (ResMisAlignCDB/MUON/Align).
139
0d24599f 140- Tell AliSimulation you want to use your local CDB for
141MUON/Align/Data
d228b279 142To do this you need to instantiate the AliCDBManager, set the
0d24599f 143default storage and set the specific storage for MUON/Align/Data,
144before instantiating AliSimulation (see for example the commented
d228b279 145lines AlirootRun_MUONtest.sh).
146
518eb852 147<pre>
d228b279 148aliroot -b >& testSim.out << EOF
149AliCDBManager* man = AliCDBManager::Instance();
162637e4 150man->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
0d24599f 151man->SetSpecificStorage("MUON/align/Data","local://ResMisAlignCDB");
d228b279 152AliSimulation MuonSim("$ALICE_ROOT/MUON/Config.C");
153MuonSim.SetWriteRawData("MUON");
154MuonSim.Run(10);
155.q
156EOF
518eb852 157</pre>
29fc2c86 158
e6168aff 159\section sim_s7 How to Merge events
cd85a354 160
161You can merge 2 types of simulated events. For example,
162you can simulate Hijing events, and then simulate muons
163merging both.
164
165Merging is done at the sdigits level, so Kinematics files
166of the merged events will just correspond to the
d55fa8e9 167Config.C simulated file).
cd85a354 168
169You must, first, do the Hijing simulation and store it
170in directory $HIJING_SIM. Note that for merging you
171won't need Kinematics files of the Hijing simulation...
172
173Hijing simulation
174
518eb852 175<pre>
cd85a354 176aliroot -b << EOF
d55fa8e9 177AliSimulation HijingSim("$HIJING_SIM/YourConfigForHIJING.C")
cd85a354 178HijingSim.Run(5)
179.q
180EOF
518eb852 181</pre>
cd85a354 182
d55fa8e9 183You cand build YourConfigFroHIJING.C File from the
184ConfigPPR file in AliRoot/macros module.
cd85a354 185
186Then you can do muon simulation and reconstruction
187merging both simulated events. In next example, we are
188merging 20 times each Hijing event in order to simulate
189100 muons merged with 5 Hijing events.
190
518eb852 191<pre>
cd85a354 192aliroot -b << EOF
193AliSimulation MuonSim("$ALICE_ROOT/MUON/Config.C")
194MuonSim.MergeWith("$HIJING_SIM/galice.root",20) //parameters are the Hijing simulation file and the number of times we use each Hijing event
195MuonSim.Run(100) // number of muon (Config.C) events
196.q
197EOF
198
199
200aliroot -b << EOF
201TPluginManager * pluginmanager = gROOT->GetPluginManager()
202pluginmanager->AddHandler("AliReconstructor","MUON","AliMUONReconstructor","MUON","AliMUONReconstructor()")
203AliReconstruction MuonRec("galice.root")
204MuonRec.SetRunTracking("")
205MuonRec.SetRunVertexFinder(kFALSE)
206MuonRec.SetRunLocalReconstruction("MUON")
207MuonRec.SetFillESD("MUON")
208MuonRec.Run()
209.q
210EOF
518eb852 211</pre>
cd85a354 212
e6168aff 213\section sim_s8 On track numbering
d228b279 214
215All generated particles, including primary and secondary
216particles are put on the stack. The secondary particles are kept
217in the stack only if they gave a hit in *any* of the ALICE detectors
218The number of all particles placed on the stack for a given event
219can be obtained with
220Int_t nPart = AliStack::GetNtrack();
221Looping from 0 to nPart via AliStack::Particle(ipart)
222gives the particle listing as obtained from the particle generator (primaries)
223and Monte Carlo (secondaries).
224
225The particle response in the detector, a hit, is registered
226in the hits tree and the hits are filled with each primary track.
227The total number of "tracks" (fills of the tree) can be obtained
c58ae721 228with ntracks = AliMUONMCDataInterface::NumberOfTracks(event) and is usually smaller than "nPart".
d228b279 229Since particles can also deposit hits in other detectors than
230the MUON spectrometer, there will be many "tracks" (fills) in the hit-tree
231without a hit in MUON.
232
233The correspondence between "track ID" in the hits-tree ("itr") and the
234particle ID for particles on the stack (i.e. generated particles) can be
235obtained via:
518eb852 236<pre>
d228b279 237for (Int_t itr = 0; itr < ntracks; itr++) {
c58ae721 238 AliMUONVHitStore* hitStore = mcDataInterface.HitStore(event,itr);
239 //track "itr" of the hits-tree
240 Int_t nhitstot = hitStore->GetSize();
241 AliMUONHit* mHit;
242 TIter next(hitStore->CreateIterator());
243 while ( ( mHit = static_cast<AliMUONHit*>(next()) ) )
244 {
245 Int_t id = mHit->Track(); //gives particle ID on stack
246 TParticle* particle = mcDataInterface.Stack(event)->Particle(id);
d228b279 247 }
248}
518eb852 249</pre>
d228b279 250
c58ae721 251where mcDataInterface has been obtained by
252AliMUONMCDataInterface mcDataInterface("galice.root");
253
d228b279 254During the procedure to go from hits to digits, the hits
255are summed up such that more than one track can contribute
256to a given digit. As a consequence the method
257Int_t AliMUONDigit::Track(Int_t trackID)
258takes an argument, where "trackID" runs from 0 to
259AliMUONDigit::Ntracks() to provide the reference to *all*
260tracks that contributed to it. The returned track ID is the one
261referred to in the hit-tree. To know which is the generated particle
262that deposited a given digit one has to follow the sequence of the kind:
c58ae721 263(shown here using the simple, but not fast, DataInterface interfaces) :
264
518eb852 265<pre>
c58ae721 266AliMUONMCDataInterface mcdi("galice.root");
267AliMUONDataInterface di("galice.root");
d228b279 268
c58ae721 269AliMUONVDigitStore* digitStore = di.DigitStore(event);
270AliMUONVDigit* mDigit = ... get some digit from the digitStore
d228b279 271
c58ae721 272for (int tr = 0; tr < mDigit->Ntracks(); tr++)
273{
d228b279 274 Int_t hitTrackID = mDigit->Track(tr);
c58ae721 275 // get the hits corresponding to this trackID
276 AliMUONHitStore* hitStore = mcdi.HitStore(event,hitTrackID);
277 // loop over the hits
278 TIter hNext(hitStore->CreateIterator());
279 AliMUONHit* mHit;
280 while ( ( mHit = static_cast<AliMUONHit*>(hNext()) ) )
281 {
282 Int_t numPart = mHit->Track(); //gives ID of particle on the stack
283 Int_t idTrack = mHit->Particle(); //gives flavour code of the particle
284 }
d228b279 285}
518eb852 286</pre>
d228b279 287
91509ec6 288This chapter is defined in the READMEsim.txt file.
23567f21 289
518eb852 290*/