]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PHOS/html/src/AliPHOSDigitizer.cxx.html
new html documentatin
[u/mrichter/AliRoot.git] / PHOS / html / src / AliPHOSDigitizer.cxx.html
1 <!DOCTYPE HTML PUBLIC "-// IETF/DTD HTML 2.0// EN">
2 <html>
3 <!--                                             -->
4 <!-- Author: ROOT team (rootdev@hpsalo.cern.ch)  -->
5 <!--                                             -->
6 <!--   Date: Tue Apr  3 16:13:09 2001            -->
7 <!--                                             -->
8 <head>
9 <title>AliPHOSDigitizer - source file</title>
10 <link rev=made href="mailto:rootdev@root.cern.ch">
11 <meta name="rating" content="General">
12 <meta name="objecttype" content="Manual">
13 <meta name="keywords" content="software development, oo, object oriented, unix, x11, windows, c++, html, rene brun, fons rademakers">
14 <meta name="description" content="ROOT - An Object Oriented Framework For Large Scale Data Analysis.">
15 </head>
16 <body BGCOLOR="#ffffff" LINK="#0000ff" VLINK="#551a8b" ALINK="#ff0000" TEXT="#000000">
17 <a name="TopOfPage"></a>
18 <pre>
19 /**************************************************************************
20  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
21  *                                                                        *
22  * Author: The ALICE Off-line Project.                                    *
23  * Contributors are mentioned in the code where appropriate.              *
24  *                                                                        *
25  * Permission to use, copy, modify and distribute this software and its   *
26  * documentation strictly for non-commercial purposes is hereby granted   *
27  * without fee, provided that the above copyright notice appears in all   *
28  * copies and that both the copyright notice and this permission notice   *
29  * appear in the supporting documentation. The authors make no claims     *
30  * about the suitability of this software for any purpose. It is          *
31  * provided "as is" without express or implied warranty.                  *
32  **************************************************************************/
33
34 /* $Id$ */
35
36 <b>//_________________________________________________________________________</b>
37 <b>//*-- Author :  Dmitri Peressounko (SUBATECH &amp; Kurchatov Institute) </b>
38 <b>//////////////////////////////////////////////////////////////////////////////</b>
39 <b>// Class performs digitization of Summable digits (in the PHOS case this is just</b>
40 <b>// sum of contributions of all primary particles into given cell). </b>
41 <b>// In addition it performs mixing of summable digits from different events.</b>
42 <b>// Examples of use:</b>
43 <b>// root[0] <a href=".././AliPHOSDigitizer.html">AliPHOSDigitizer</a> * d = new <a href=".././AliPHOSDigitizer.html">AliPHOSDigitizer</a>() ;</b>
44 <b>// root[1] d-&gt;ExecuteTask()             </b>
45 <b>// Warning in &lt;TDatabasePDG::TDatabasePDG&gt;: object already instantiated</b>
46 <b>//                       //Digitizes SDigitis in all events found in file galice.root </b>
47 <b>//                       //Depending on variable "CONFIG_SPLIT_FILE" reads branches stored in galice.root</b>
48 <b>//                       //or in PHOS.SDigits.root</b>
49 <b>// root[2] <a href=".././AliPHOSDigitizer.html">AliPHOSDigitizer</a> * d1 = new <a href=".././AliPHOSDigitizer.html">AliPHOSDigitizer</a>("galice1.root") ;  </b>
50 <b>//                       // Will read sdigits from galice1.root</b>
51 <b>// root[3] d1-&gt;<a href="#AliPHOSDigitizer:MixWith">MixWith</a>("galice2.root")       </b>
52 <b>// Warning in &lt;TDatabasePDG::TDatabasePDG&gt;: object already instantiated</b>
53 <b>//                       // Reads another portion of sdigits from galice2.root</b>
54 <b>// root[3] d1-&gt;<a href="#AliPHOSDigitizer:MixWith">MixWith</a>("galice3.root")       </b>
55 <b>//                       // Reads another portion of sdigits from galice3.root</b>
56 <b>// root[4] d-&gt;ExecuteTask("deb timing")    </b>
57 <b>//                       // Reads SDigits from files galice1.root, galice2.root ....</b>
58 <b>//                       // mixes them and stores produced Digits in file galice1.root          </b>
59 <b>//                       // deb - prints <a href="../ListOfTypes.html#number">number</a> of produced digits</b>
60 <b>//                       // deb all - prints list of produced digits</b>
61 <b>//                       // timing  - prints time used for digitization</b>
62 <b>//</b>
63 <b>// For each event two branches are created in TreeD:</b>
64 <b>//   "PHOS" - list of digits</b>
65 <b>//   "<a href=".././AliPHOSDigitizer.html">AliPHOSDigitizer</a>" - <a href=".././AliPHOSDigitizer.html">AliPHOSDigitizer</a> with all parameters used in digitization</b>
66 <b>//</b>
67 <b>// Note, that one can specify new file name for digits branch, and repeat digitization with</b>
68 <b>// another set of parameters.</b>
69
70 <b>// --- ROOT system ---</b>
71 #include "TFile.h"
72 #include "TTree.h"
73 #include "TSystem.h"
74 #include "TROOT.h"
75 #include "TFolder.h"
76 #include "TObjString.h"
77 #include "TBenchmark.h"
78 <b>// --- Standard library ---</b>
79 #include &lt;iomanip.h&gt;
80
81 <b>// --- AliRoot header files ---</b>
82
83 #include "AliRun.h"
84 #include "AliPHOSDigit.h"
85 #include "AliPHOSHit.h"
86 #include "AliPHOSv1.h"
87 #include "AliPHOSDigitizer.h"
88 #include "AliPHOSSDigitizer.h"
89 #include "AliPHOSGeometry.h"
90
91 ClassImp(AliPHOSDigitizer)
92
93
94 <b>//____________________________________________________________________________ </b>
95 <a name="AliPHOSDigitizer:AliPHOSDigitizer"> </a>  <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:AliPHOSDigitizer">AliPHOSDigitizer::AliPHOSDigitizer</a>():TTask("<a href=".././AliPHOSDigitizer.html">AliPHOSDigitizer</a>","") 
96 {
97 <b>  // ctor</b>
98
99   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitizer">fSDigitizer</a> = 0 ;
100   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fNinputs">fNinputs</a> = 1 ;
101   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fPinNoise">fPinNoise</a> = 0.01 ;
102   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fEMCDigitThreshold">fEMCDigitThreshold</a> = 0.01 ;
103   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fCPVNoise">fCPVNoise</a> = 0.01;
104   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fCPVDigitThreshold">fCPVDigitThreshold</a> = 0.09 ;
105   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fPPSDNoise">fPPSDNoise</a> = 0.0000001;
106   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fPPSDDigitThreshold">fPPSDDigitThreshold</a> = 0.0000002 ;
107   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fInitialized">fInitialized</a> = kFALSE ;
108
109   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fHeaderFiles">fHeaderFiles</a> = 0;
110   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitsFiles">fSDigitsFiles</a> = 0;
111   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigits">fSDigits</a>  = 0 ;
112   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigits">fDigits</a> = 0;
113
114 }
115 <b>//____________________________________________________________________________ </b>
116 <a name="AliPHOSDigitizer:Init"> </a><a href="../ListOfTypes.html#void">void</a> <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:Init">AliPHOSDigitizer::Init</a>(){
117 <b>// Mades all memory allocations and defiles, </b>
118 <b>// whether first (default) file will be output file (isOutFile !=0) </b>
119
120   if(!<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fInitialized">fInitialized</a>){
121     
122     cout &lt;&lt; "In Init" &lt;&lt; endl ;
123
124     <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fHeaderFiles">fHeaderFiles</a>  = new TClonesArray("TObjString",1) ;
125     new((*<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fHeaderFiles">fHeaderFiles</a>)[0]) TObjString("galice.root") ;
126     
127 <b>    //Test, if this file already open</b>
128     
129     TFile *file = (TFile*) gROOT-&gt;GetFile(((TObjString *) <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fHeaderFiles">fHeaderFiles</a>-&gt;At(0))-&gt;GetString() ) ;
130     
131     if(file == 0){
132       file = new TFile(((TObjString *) <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fHeaderFiles">fHeaderFiles</a>-&gt;At(0))-&gt;GetString(),"update") ;
133       gAlice = (AliRun *) file-&gt;Get("gAlice") ;
134     }
135     else
136       file = new TFile(((TObjString *) <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fHeaderFiles">fHeaderFiles</a>-&gt;At(0))-&gt;GetString()) ;
137     
138     file-&gt;cd() ;
139     
140     <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitsFiles">fSDigitsFiles</a> = new TClonesArray("TObjString",1);
141     if(gSystem-&gt;Getenv("CONFIG_SPLIT_FILE")) 
142       new((*<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitsFiles">fSDigitsFiles</a>)[0]) TObjString("./PHOS.SDigits.root") ;   
143     else
144       new((*<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitsFiles">fSDigitsFiles</a>)[0]) TObjString("") ;   
145     
146     <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigits">fSDigits</a>      = new TClonesArray("TClonesArray",1) ;
147     new((*<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigits">fSDigits</a>)[0]) TClonesArray("<a href=".././AliPHOSDigit.html">AliPHOSDigit</a>",1000) ;
148
149     if(gSystem-&gt;Getenv("CONFIG_SPLIT_FILE")) 
150       <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigitsFile">fDigitsFile</a> = "PHOS.Digits.root" ;   
151     else
152       <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigitsFile">fDigitsFile</a> = "" ;
153
154     <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigits">fDigits</a> = new TClonesArray("<a href=".././AliPHOSDigit.html">AliPHOSDigit</a>",200000) ;
155     
156     <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fIevent">fIevent</a>    = new TArrayI(1) ;
157     <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fIevent">fIevent</a>-&gt;AddAt(-1,0 ) ; 
158     <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fIeventMax">fIeventMax</a> = new TArrayI(1) ;
159
160     <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fIeventMax">fIeventMax</a>-&gt;AddAt((<a href="../ListOfTypes.html#Int_t">Int_t</a>) gAlice-&gt;TreeE()-&gt;GetEntries(), 0 );
161     
162 <b>    // add Task to //root/Tasks folder</b>
163     TTask * roottasks = (TTask*)gROOT-&gt;GetRootFolder()-&gt;FindObject("Tasks") ; 
164     roottasks-&gt;Add(this) ; 
165     
166     <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fInitialized">fInitialized</a> = kTRUE ;
167   }
168
169 }
170
171 <b>//____________________________________________________________________________ </b>
172 <a name="AliPHOSDigitizer:AliPHOSDigitizer"> </a><a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:AliPHOSDigitizer">AliPHOSDigitizer::AliPHOSDigitizer</a>(const <a href="../ListOfTypes.html#char">char</a> *HeaderFile,const <a href="../ListOfTypes.html#char">char</a> *DigitsFile):TTask("<a href=".././AliPHOSDigitizer.html">AliPHOSDigitizer</a>","")
173 {
174 <b>  // ctor</b>
175   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fHeaderFiles">fHeaderFiles</a>  = new TClonesArray("TObjString",1) ;          
176   new((*<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fHeaderFiles">fHeaderFiles</a>)[0]) TObjString(HeaderFile) ;
177   
178 <b>  // Header file, where result will be stored</b>
179   TFile * file = (TFile*) gROOT-&gt;GetFile(((TObjString *) <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fHeaderFiles">fHeaderFiles</a>-&gt;At(0))-&gt;GetString() ) ;
180   if(file==0){
181     file = new TFile(((TObjString *) <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fHeaderFiles">fHeaderFiles</a>-&gt;At(0))-&gt;GetString(),"update") ;      
182     gAlice = (AliRun *) file-&gt;Get("gAlice") ;  //If not read yet
183   }
184   
185   file-&gt;cd() ;
186   
187   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitsFiles">fSDigitsFiles</a> = new TClonesArray("TObjString",1);         // File name of the SDigits branch
188   if(DigitsFile){
189     new((*<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitsFiles">fSDigitsFiles</a>)[0]) TObjString(DigitsFile) ;  
190 <b>    //Normally, branch names are modified to be "./xxx", so add this "./" </b>
191     <a href="../ListOfTypes.html#char">char</a> * base = new <a href="../ListOfTypes.html#char">char</a>[strlen(gAlice-&gt;GetBaseFile())+2];
192     sprintf(base,"%s/",gAlice-&gt;GetBaseFile());
193     if(!strstr(DigitsFile,base) )
194       ((TObjString*) <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitsFiles">fSDigitsFiles</a>-&gt;At(0))-&gt;GetString().Insert(0,base)  ;
195     delete base ;
196   }
197   else
198     if(gSystem-&gt;Getenv("CONFIG_SPLIT_FILE")) 
199       new((*<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitsFiles">fSDigitsFiles</a>)[0]) TObjString("./PHOS.SDigits.root") ;   
200     else
201       new((*<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitsFiles">fSDigitsFiles</a>)[0]) TObjString("") ;   
202     
203   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigits">fSDigits</a>      = new TClonesArray("TClonesArray",1) ;      // here list of SDigits wil be stored
204   new((*<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigits">fSDigits</a>)[0]) TClonesArray("<a href=".././AliPHOSDigit.html">AliPHOSDigit</a>",1000) ;
205     
206   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigits">fDigits</a> = new TClonesArray("<a href=".././AliPHOSDigit.html">AliPHOSDigit</a>",200000) ;
207   
208   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigitsFile">fDigitsFile</a> = DigitsFile ; 
209     
210   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fIevent">fIevent</a>    = new TArrayI(1) ;
211   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fIevent">fIevent</a>-&gt;AddAt(-1,0 ) ; 
212   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fIeventMax">fIeventMax</a> = new TArrayI(1) ;
213
214 <b>  // Get <a href="../ListOfTypes.html#number">number</a> of events to process</b>
215   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fIeventMax">fIeventMax</a>-&gt;AddAt((<a href="../ListOfTypes.html#Int_t">Int_t</a>) gAlice-&gt;TreeE()-&gt;GetEntries(), 0 );
216
217   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fNinputs">fNinputs</a> = 1 ;
218
219   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fPinNoise">fPinNoise</a> = 0.01 ;
220   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fEMCDigitThreshold">fEMCDigitThreshold</a> = 0.01 ;
221   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fCPVNoise">fCPVNoise</a> = 0.01;
222   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fCPVDigitThreshold">fCPVDigitThreshold</a> = 0.09 ;
223   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fPPSDNoise">fPPSDNoise</a> = 0.0000001;
224   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fPPSDDigitThreshold">fPPSDDigitThreshold</a> = 0.0000002 ;  
225
226 <b>  // add Task to //root/Tasks folder</b>
227   TTask * roottasks = (TTask*)gROOT-&gt;GetRootFolder()-&gt;FindObject("Tasks") ; 
228   roottasks-&gt;Add(this) ; 
229   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fInitialized">fInitialized</a> = kTRUE ;
230     
231 }
232
233 <b>//____________________________________________________________________________ </b>
234 <a name="AliPHOSDigitizer:~AliPHOSDigitizer"> </a>  <a href=".././AliPHOSDigitizer.html">AliPHOSDigitizer</a>::~<a href=".././AliPHOSDigitizer.html">AliPHOSDigitizer</a>()
235 {
236 <b>  // dtor</b>
237
238   if(<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fHeaderFiles">fHeaderFiles</a>)  delete <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fHeaderFiles">fHeaderFiles</a> ;
239   if(<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitsFiles">fSDigitsFiles</a>) delete <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitsFiles">fSDigitsFiles</a> ;
240   if(<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigits">fSDigits</a>)      delete <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigits">fSDigits</a> ;
241   if(<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigits">fDigits</a>)       delete <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigits">fDigits</a> ;
242 }
243 <b>//____________________________________________________________________________</b>
244 <a name="AliPHOSDigitizer:Reset"> </a><a href="../ListOfTypes.html#void">void</a> <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:Reset">AliPHOSDigitizer::Reset</a>() { 
245 <b>  //sets current event <a href="../ListOfTypes.html#number">number</a> to the beginning</b>
246
247   if(!<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fInitialized">fInitialized</a>)
248     <a href="#AliPHOSDigitizer:Init">Init</a>() ;
249
250   <a href="../ListOfTypes.html#Int_t">Int_t</a> inputs ;
251   for(inputs = 0; inputs &lt; <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fNinputs">fNinputs</a> ;inputs++)
252       <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fIevent">fIevent</a>-&gt;AddAt(-1, inputs ) ;
253   
254 }
255 <b>//____________________________________________________________________________</b>
256 <a name="AliPHOSDigitizer:Combinator"> </a><a href="../ListOfTypes.html#Bool_t">Bool_t</a> <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:Combinator">AliPHOSDigitizer::Combinator</a>() { 
257
258 <b>  //Makes all desirable combinations Signal+Background,</b>
259 <b>  // returns kFALSE when all combinations are made</b>
260 <b>  // May be useful to introduce some options like "One-to-One", "All-to-One" and "All-to-All" ?</b>
261
262 <b>  //realizing "One-to-One" option...</b>
263
264   if(!<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fInitialized">fInitialized</a>)
265     <a href="#AliPHOSDigitizer:Init">Init</a>() ;
266
267   <a href="../ListOfTypes.html#Int_t">Int_t</a> inputs ;
268   <a href="../ListOfTypes.html#Bool_t">Bool_t</a> endNotReached = kTRUE ;
269
270   for(inputs = 0; (inputs &lt; <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fNinputs">fNinputs</a>) &amp;&amp; endNotReached ;inputs++){
271     if(<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fIevent">fIevent</a>-&gt;At(inputs)+1 &lt; <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fIeventMax">fIeventMax</a>-&gt;At(inputs))
272       <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fIevent">fIevent</a>-&gt;AddAt(<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fIevent">fIevent</a>-&gt;At(inputs)+1, inputs ) ;
273     else
274       if(inputs == 0)
275         endNotReached = kFALSE ;
276       else //for inputs other than base one start from the beginning
277         <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fIevent">fIevent</a>-&gt;AddAt(0, inputs ) ;
278     
279   }
280   return endNotReached ;
281   
282 }
283
284 <b>//____________________________________________________________________________</b>
285 <a name="AliPHOSDigitizer:Digitize"> </a><a href="../ListOfTypes.html#void">void</a> <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:Digitize">AliPHOSDigitizer::Digitize</a>(<a href="../ListOfTypes.html#Option_t">Option_t</a> *option) { 
286
287 <b>  //Makes the digitization of the collected summable digits</b>
288
289   if(!<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fInitialized">fInitialized</a>)
290     <a href="#AliPHOSDigitizer:Init">Init</a>() ;
291
292   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigits">fDigits</a>-&gt;Clear() ;
293
294   <a href=".././AliPHOS.html">AliPHOS</a> * PHOS = (<a href=".././AliPHOS.html">AliPHOS</a> *) gAlice-&gt;GetDetector("PHOS") ;   
295   <a href=".././AliPHOSGeometry.html">AliPHOSGeometry</a> *geom = <a href=".././AliPHOSGeometry.html#AliPHOSGeometry:GetInstance">AliPHOSGeometry::GetInstance</a>( PHOS-&gt;GetGeometry()-&gt;GetName(), PHOS-&gt;GetGeometry()-&gt;GetTitle() );
296
297 <b>  //Making digits with noise, first EMC</b>
298   <a href="../ListOfTypes.html#Int_t">Int_t</a> nEMC = geom-&gt;GetNModules()*geom-&gt;GetNPhi()*geom-&gt;GetNZ();
299   
300   <a href="../ListOfTypes.html#Int_t">Int_t</a> nCPV ;
301   <a href="../ListOfTypes.html#Int_t">Int_t</a> nPPSD ;
302   <a href="../ListOfTypes.html#Int_t">Int_t</a> absID ;
303   TString name      =  geom-&gt;GetName() ;
304   
305   if ( name == "IHEP" || name == "MIXT" )    
306     nCPV =nEMC + geom-&gt;GetNumberOfCPVPadsZ()*geom-&gt;GetNumberOfCPVPadsPhi()*
307       geom-&gt;GetNCPVModules()*geom-&gt;GetNumberOfCPVLayers() ;
308   else
309     nCPV = nEMC; 
310   
311   if ( name == "GPS2" || name == "MIXT" )    
312     nPPSD =nCPV+2*geom-&gt;GetNPPSDModules()*geom-&gt;GetNumberOfModulesPhi()*geom-&gt;GetNumberOfModulesZ()*
313       geom-&gt;GetNumberOfPadsPhi()*geom-&gt;GetNumberOfPadsZ() ;
314   else
315     nPPSD = nCPV; 
316
317
318   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigits">fDigits</a>-&gt;Expand(nPPSD) ;
319
320   
321   for(absID = 1; absID &lt;= nEMC; absID++){
322     <a href="../ListOfTypes.html#Float_t">Float_t</a> noise = gRandom-&gt;Gaus(0., <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fPinNoise">fPinNoise</a>) ; 
323     new((*<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigits">fDigits</a>)[absID-1]) <a href=".././AliPHOSDigit.html">AliPHOSDigit</a>( -1,absID,<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitizer">fSDigitizer</a>-&gt;<a href=".././AliPHOSSDigitizer.html#AliPHOSSDigitizer:Digitize">Digitize</a>(noise) ) ;
324   }
325   
326   for(absID = nEMC+1; absID &lt;= nCPV; absID++){
327     <a href="../ListOfTypes.html#Float_t">Float_t</a> noise = gRandom-&gt;Gaus(0., <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fCPVNoise">fCPVNoise</a>) ; 
328     new((*<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigits">fDigits</a>)[absID-1]) <a href=".././AliPHOSDigit.html">AliPHOSDigit</a>( -1,absID,<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitizer">fSDigitizer</a>-&gt;<a href=".././AliPHOSSDigitizer.html#AliPHOSSDigitizer:Digitize">Digitize</a>(noise) ) ;
329   }
330   
331   for(absID = nCPV+1; absID &lt;= nPPSD; absID++){
332     <a href="../ListOfTypes.html#Float_t">Float_t</a> noise = gRandom-&gt;Gaus(0., <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fPPSDNoise">fPPSDNoise</a>) ; 
333     new((*<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigits">fDigits</a>)[absID-1]) <a href=".././AliPHOSDigit.html">AliPHOSDigit</a>( -1,absID,<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitizer">fSDigitizer</a>-&gt;<a href=".././AliPHOSSDigitizer.html#AliPHOSSDigitizer:Digitize">Digitize</a>(noise) ) ;
334   }
335   
336
337 <b>  // Now look throught (unsorted) list of SDigits and add corresponding digits  </b>
338   <a href=".././AliPHOSDigit.html">AliPHOSDigit</a> *curSDigit ;
339   <a href=".././AliPHOSDigit.html">AliPHOSDigit</a> *digit ;
340     
341   <a href="../ListOfTypes.html#Int_t">Int_t</a> inputs;
342   for(inputs = 0; inputs&lt; <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fNinputs">fNinputs</a> ; inputs++){  //loop over (possible) merge sources
343     
344     TClonesArray * sdigits= (TClonesArray *)<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigits">fSDigits</a>-&gt;At(inputs) ;
345     <a href="../ListOfTypes.html#Int_t">Int_t</a> isdigit ;
346
347     <a href="../ListOfTypes.html#Int_t">Int_t</a> nSDigits = sdigits-&gt;GetEntries() ;     
348     for(isdigit=0;isdigit&lt; nSDigits; isdigit++){
349       curSDigit = (<a href=".././AliPHOSDigit.html">AliPHOSDigit</a> *)sdigits-&gt;At(isdigit) ;
350       if(inputs)                                       //Shift primaries for non-background sdigits
351         curSDigit-&gt;ShiftPrimary(inputs) ;
352       digit = (<a href=".././AliPHOSDigit.html">AliPHOSDigit</a> *)<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigits">fDigits</a>-&gt;At(curSDigit-&gt;GetId() - 1);
353       *digit = *digit + *curSDigit ;
354     }  
355   }
356
357
358 <b>  //remove digits below thresholds</b>
359   for(absID = 0; absID &lt; nEMC ; absID++)
360     if(<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitizer">fSDigitizer</a>-&gt;<a href=".././AliPHOSSDigitizer.html#AliPHOSSDigitizer:Calibrate">Calibrate</a>(((<a href=".././AliPHOSDigit.html">AliPHOSDigit</a>*)<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigits">fDigits</a>-&gt;At(absID))-&gt;GetAmp()) &lt; <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fEMCDigitThreshold">fEMCDigitThreshold</a>)
361       <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigits">fDigits</a>-&gt;RemoveAt(absID) ;
362   for(absID = nEMC; absID &lt; nCPV ; absID++)
363     if(<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitizer">fSDigitizer</a>-&gt;<a href=".././AliPHOSSDigitizer.html#AliPHOSSDigitizer:Calibrate">Calibrate</a>(((<a href=".././AliPHOSDigit.html">AliPHOSDigit</a>*)<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigits">fDigits</a>-&gt;At(absID))-&gt;GetAmp()) &lt; <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fCPVDigitThreshold">fCPVDigitThreshold</a>)
364       <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigits">fDigits</a>-&gt;RemoveAt(absID) ;
365   for(absID = nCPV; absID &lt; nPPSD ; absID++)
366     if(<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitizer">fSDigitizer</a>-&gt;<a href=".././AliPHOSSDigitizer.html#AliPHOSSDigitizer:Calibrate">Calibrate</a>(((<a href=".././AliPHOSDigit.html">AliPHOSDigit</a> *)<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigits">fDigits</a>-&gt;At(absID))-&gt;GetAmp()) &lt; <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fPPSDDigitThreshold">fPPSDDigitThreshold</a>)
367       <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigits">fDigits</a>-&gt;RemoveAt(absID) ;
368   
369   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigits">fDigits</a>-&gt;Compress() ;  
370   
371   <a href="../ListOfTypes.html#Int_t">Int_t</a> ndigits = <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigits">fDigits</a>-&gt;GetEntriesFast() ;
372
373   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigits">fDigits</a>-&gt;Expand(ndigits) ;
374
375
376 <b>  //Set indexes in list of digits</b>
377   <a href="../ListOfTypes.html#Int_t">Int_t</a> i ;
378   for (i = 0 ; i &lt; ndigits ; i++) { 
379     <a href=".././AliPHOSDigit.html">AliPHOSDigit</a> * digit = (<a href=".././AliPHOSDigit.html">AliPHOSDigit</a> *) <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigits">fDigits</a>-&gt;At(i) ; 
380     digit-&gt;SetIndexInList(i) ;     
381   }
382 }
383 <b>//____________________________________________________________________________</b>
384 <a name="AliPHOSDigitizer:WriteDigits"> </a><a href="../ListOfTypes.html#void">void</a> <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:WriteDigits">AliPHOSDigitizer::WriteDigits</a>(){
385
386 <b>  //Made TreeD in the output file if necessary and writes digiths there.</b>
387
388   gAlice-&gt;GetEvent(<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fIevent">fIevent</a>-&gt;At(0)) ;  // Suitable only for One-To-One mixing
389   gAlice-&gt;SetEvent(<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fIevent">fIevent</a>-&gt;At(0)) ;  // for all-to-all will produce a lot of branches in TreeD
390
391   cout &lt;&lt; "event " &lt;&lt;<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fIevent">fIevent</a>-&gt;At(0) &lt;&lt; endl ; 
392
393   if(gAlice-&gt;TreeD()==0){
394     gAlice-&gt;MakeTree("D") ;
395     cout &lt;&lt; "MakeTree D" &lt;&lt; endl ;
396   }
397   
398   cout &lt;&lt; "Write " &lt;&lt; <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigits">fDigits</a>-&gt;GetSize() &lt;&lt; "  " &lt;&lt; <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigits">fDigits</a>-&gt;GetEntries() &lt;&lt; endl ;
399
400
401 <b>  //Make (if necessary) branches    </b>
402 <b>  //First generate file name</b>
403
404   <a href="../ListOfTypes.html#char">char</a> * file =0;
405   if(!<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigitsFile">fDigitsFile</a>.IsNull())
406     file = (<a href="../ListOfTypes.html#char">char</a>*) <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigitsFile">fDigitsFile</a>.Data() ; 
407   else
408     if(gSystem-&gt;Getenv("CONFIG_SPLIT_FILE")){ //generating file name
409       file = new <a href="../ListOfTypes.html#char">char</a>[30] ;
410 <b>      //     sprintf(file,"PHOS.SDigits%d.root",ievent) ;</b>
411       sprintf(file,"PHOS.SDigits.root") ;
412     }
413     else
414       file = 0 ;
415   
416 <b>  //Second, check, if this branch already exits?</b>
417   TBranch * digitsBranch = 0;
418   TBranch * digitizerBranch = 0;
419   
420   TObjArray * branches = gAlice-&gt;TreeD()-&gt;GetListOfBranches() ;
421   <a href="../ListOfTypes.html#Int_t">Int_t</a> ibranch;
422   <a href="../ListOfTypes.html#Bool_t">Bool_t</a> phosNotFound = kTRUE ;
423   <a href="../ListOfTypes.html#Bool_t">Bool_t</a> digitizerNotFound = kTRUE ;
424   
425   for(ibranch = 0;ibranch &lt;branches-&gt;GetEntries();ibranch++){
426     
427     if(phosNotFound){
428       digitsBranch=(TBranch *) branches-&gt;At(ibranch) ;
429       if( strcmp("PHOS",digitsBranch-&gt;GetName())==0 )
430         if(file == 0){
431           if( strlen(digitsBranch-&gt;GetTitle()) == 0) 
432             phosNotFound = kFALSE ;
433         }
434         else
435           if(strcmp(file,digitsBranch-&gt;GetTitle()) == 0) 
436             phosNotFound = kFALSE ;
437       
438     }
439     
440     if(digitizerNotFound){
441       digitizerBranch = (TBranch *) branches-&gt;At(ibranch) ;
442       if( strcmp(digitizerBranch-&gt;GetName(),"<a href=".././AliPHOSDigitizer.html">AliPHOSDigitizer</a>") == 0)
443         if(file == 0){
444           if( strlen(digitizerBranch-&gt;GetTitle()) == 0) 
445             digitizerNotFound = kFALSE ;
446         }
447         else
448           if( strcmp(digitizerBranch-&gt;GetTitle(),file) == 0)
449             digitizerNotFound = kFALSE ;
450     }
451   }
452   
453   if(digitizerNotFound || phosNotFound){ // create new branches
454 <b>    //Compose filename    </b>
455     TDirectory *cwd = gDirectory;
456
457 <b>    //First create list of sdigits</b>
458     <a href="../ListOfTypes.html#Int_t">Int_t</a> bufferSize = 32000 ;    
459     digitsBranch = gAlice-&gt;TreeD()-&gt;Branch("PHOS",&amp;<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigits">fDigits</a>,bufferSize);
460 <b>    //we store filename in Title feld as well because in the case of small size of branch</b>
461 <b>    //it will be stored in the header file, and information about branchfilename will be lost.</b>
462     digitsBranch-&gt;SetTitle(file);
463     if (file) {
464       digitsBranch-&gt;SetFile(file);
465       TIter next( digitsBranch-&gt;GetListOfBranches());
466       while ((digitsBranch=(TBranch*)next())) {
467         digitsBranch-&gt;SetFile(file);
468       }   
469       cwd-&gt;cd();
470     } 
471     else
472       digitsBranch-&gt;SetTitle("");
473
474     
475 <b>    //second - create Digitizer</b>
476     <a href="../ListOfTypes.html#Int_t">Int_t</a> splitlevel = 0 ;
477     <a href=".././AliPHOSDigitizer.html">AliPHOSDigitizer</a> * d = this ;
478     digitizerBranch = gAlice-&gt;TreeD()-&gt;Branch("<a href=".././AliPHOSDigitizer.html">AliPHOSDigitizer</a>","<a href=".././AliPHOSDigitizer.html">AliPHOSDigitizer</a>",
479                                               &amp;d,bufferSize,splitlevel); 
480 <b>    //we store filename in Title feld as well because in the case of small size of branch</b>
481 <b>    //it will be stored in the header file, and information about branchfilename will be lost.</b>
482     digitizerBranch-&gt;SetTitle(file);
483     if (file) {
484       digitizerBranch-&gt;SetFile(file);
485       TIter next( digitizerBranch-&gt;GetListOfBranches());
486       while ((digitizerBranch=(TBranch*)next())) {
487         digitizerBranch-&gt;SetFile(file);
488       }   
489       cwd-&gt;cd();
490     }
491     else
492       digitizerBranch-&gt;SetTitle("");
493   }
494   else{   //if not create new branches, set addresses to old ones
495
496     cout &lt;&lt; "fill old branches " &lt;&lt; endl ;
497
498     digitsBranch-&gt;SetAddress(&amp;<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigits">fDigits</a>);
499     <a href=".././AliPHOSDigitizer.html">AliPHOSDigitizer</a> * d = this ;
500     digitizerBranch-&gt;SetAddress(&amp;d) ;
501   }
502   
503   gAlice-&gt;TreeD()-&gt;Fill() ;
504   
505   gAlice-&gt;TreeD()-&gt;Write(0,kOverwrite) ;  
506 }
507
508 <b>//____________________________________________________________________________</b>
509 <a name="AliPHOSDigitizer:Exec"> </a><a href="../ListOfTypes.html#void">void</a> <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:Exec">AliPHOSDigitizer::Exec</a>(<a href="../ListOfTypes.html#Option_t">Option_t</a> *option) { 
510 <b>  //manager</b>
511   if(!<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fInitialized">fInitialized</a>)    <a href="#AliPHOSDigitizer:Init">Init</a>() ;
512
513   if(strstr(option,"tim"))
514     gBenchmark-&gt;Start("PHOSDigitizer");
515
516 <b>  //reset events numbers to start from the beginnig</b>
517   <a href="#AliPHOSDigitizer:Reset">Reset</a>() ;
518   
519   while(<a href="#AliPHOSDigitizer:Combinator">Combinator</a>()){  
520     
521     if(!<a href="#AliPHOSDigitizer:ReadSDigits">ReadSDigits</a>()) //read sdigits event(s) evaluated by <a href="#AliPHOSDigitizer:Combinator">Combinator</a>() from file(s)
522       return ;    
523     
524     <a href="#AliPHOSDigitizer:Digitize">Digitize</a>(option) ; //Add prepared SDigits to digits and add the noise
525     <a href="#AliPHOSDigitizer:WriteDigits">WriteDigits</a>() ;
526     
527     if(strstr(option,"deb"))
528       <a href="#AliPHOSDigitizer:PrintDigits">PrintDigits</a>(option);
529
530   }
531
532   if(strstr(option,"tim")){
533     gBenchmark-&gt;Stop("PHOSDigitizer");
534     cout &lt;&lt; "<a href=".././AliPHOSDigitizer.html">AliPHOSDigitizer</a>:" &lt;&lt; endl ;
535     cout &lt;&lt; "  took " &lt;&lt; gBenchmark-&gt;GetCpuTime("PHOSDigitizer") &lt;&lt; " seconds for SDigitizing " 
536          &lt;&lt;  gBenchmark-&gt;GetCpuTime("PHOSDigitizer")/(<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fIeventMax">fIeventMax</a>-&gt;At(0)) &lt;&lt; " seconds per event " &lt;&lt; endl ;
537     cout &lt;&lt; endl ;
538   }
539   
540 }
541
542 <b>//__________________________________________________________________</b>
543 <a name="AliPHOSDigitizer:ReadSDigits"> </a><a href="../ListOfTypes.html#Bool_t">Bool_t</a> <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:ReadSDigits">AliPHOSDigitizer::ReadSDigits</a>(){
544 <b>// Reads summable digits from the opened files for the particular set of events given by <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fIevent">fIevent</a></b>
545
546   if(!<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fInitialized">fInitialized</a>)    <a href="#AliPHOSDigitizer:Init">Init</a>() ;
547
548   <a href="../ListOfTypes.html#Int_t">Int_t</a> inputs ;
549   for(inputs = <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fNinputs">fNinputs</a>-1; inputs &gt;= 0; inputs --){
550
551     <a href="../ListOfTypes.html#Int_t">Int_t</a> event = <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fIevent">fIevent</a>-&gt;At(inputs) ;
552
553     TFile * file = (TFile*) gROOT-&gt;GetFile(((TObjString *) <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fHeaderFiles">fHeaderFiles</a>-&gt;At(inputs))-&gt;GetString() ) ;
554     file-&gt;cd() ;
555
556 <b>    // Get SDigits Tree header from file</b>
557     <a href="../ListOfTypes.html#char">char</a> treeName[20]; 
558     sprintf(treeName,"TreeS%d",event);
559     TTree * treeS = (TTree*)file-&gt;Get(treeName);
560    
561     if(treeS==0){
562       cout &lt;&lt; "Error at <a href=".././AliPHOSDigitizer.html">AliPHOSDigitizer</a>: no "&lt;&lt;treeName &lt;&lt; "   in file " &lt;&lt; file-&gt;GetName() &lt;&lt; endl ;
563       cout &lt;&lt; "Do nothing " &lt;&lt; endl ;
564       return kFALSE ;
565     }
566
567     TBranch * sdigitsBranch = 0;
568     TBranch * sdigitizerBranch = 0;
569
570     TObjArray * branches = treeS-&gt;GetListOfBranches() ;
571     <a href="../ListOfTypes.html#Int_t">Int_t</a> ibranch;
572     <a href="../ListOfTypes.html#Bool_t">Bool_t</a> phosNotFound = kTRUE ;
573     <a href="../ListOfTypes.html#Bool_t">Bool_t</a> sdigitizerNotFound = kTRUE ;
574   
575     for(ibranch = 0;ibranch &lt;branches-&gt;GetEntries();ibranch++){
576             
577       if(phosNotFound){
578         sdigitsBranch=(TBranch *) branches-&gt;At(ibranch) ;
579         if(( strcmp("PHOS",sdigitsBranch-&gt;GetName())==0 ) &amp;&amp;
580            ((TObjString*) <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitsFiles">fSDigitsFiles</a>-&gt;At(inputs))-&gt;GetString().CompareTo(sdigitsBranch-&gt;GetTitle())== 0 )
581               phosNotFound = kFALSE ;
582         
583       }
584       
585       if(sdigitizerNotFound){
586         sdigitizerBranch = (TBranch *) branches-&gt;At(ibranch) ;
587         if(( strcmp(sdigitizerBranch-&gt;GetName(),"<a href=".././AliPHOSSDigitizer.html">AliPHOSSDigitizer</a>") == 0) &amp;&amp;
588            ((TObjString*) <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitsFiles">fSDigitsFiles</a>-&gt;At(inputs))-&gt;GetString().CompareTo(sdigitizerBranch-&gt;GetTitle())== 0 )
589               sdigitizerNotFound = kFALSE ;
590         
591       }
592     }
593     
594     if(sdigitizerNotFound || phosNotFound){
595       cout &lt;&lt; "Can't find Branch with sdigits or SDigitizer in the file " ;
596       if( ((TObjString*)<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitsFiles">fSDigitsFiles</a>-&gt;At(inputs))-&gt;GetString().IsNull() )
597         cout &lt;&lt; file-&gt;GetName() &lt;&lt; endl ;        
598       else
599         cout &lt;&lt; ((TObjString*)<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitsFiles">fSDigitsFiles</a>-&gt;At(inputs))-&gt;GetString().Data() &lt;&lt; endl ;
600       cout &lt;&lt; "Do nothing" &lt;&lt;endl  ;
601       return kFALSE ;
602     }
603     
604     TClonesArray * sdigits = (TClonesArray*) <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigits">fSDigits</a>-&gt;At(inputs) ;  
605     sdigitsBranch-&gt;SetAddress(&amp;sdigits) ;
606     
607     <a href=".././AliPHOSSDigitizer.html">AliPHOSSDigitizer</a> *sDigitizer = new <a href=".././AliPHOSSDigitizer.html">AliPHOSSDigitizer</a>();
608     sdigitizerBranch-&gt;SetAddress(&amp;sDigitizer) ;
609     treeS-&gt;GetEvent(0) ;
610     
611     if(<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitizer">fSDigitizer</a> == 0)
612       <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitizer">fSDigitizer</a> = sDigitizer ;
613     else
614       if(!((*<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitizer">fSDigitizer</a>)==(*sDigitizer)) ){
615         cout &lt;&lt; "ERROR: you are using sdigits made with different SDigitizers" &lt;&lt; endl ;
616         <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitizer">fSDigitizer</a>-&gt;<a href=".././AliPHOSSDigitizer.html#AliPHOSSDigitizer:Print">Print</a>("") ;
617         sDigitizer-&gt;<a href="#AliPHOSDigitizer:Print">Print</a>("") ;
618         cout &lt;&lt; "Do Nothing " &lt;&lt; endl ;
619         return kFALSE ;
620       }
621     
622   }
623   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fPedestal">fPedestal</a> = <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitizer">fSDigitizer</a>-&gt;<a href=".././AliPHOSSDigitizer.html#AliPHOSSDigitizer:GetPedestalParameter">GetPedestalParameter</a>() ;
624   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSlope">fSlope</a>    = <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitizer">fSDigitizer</a>-&gt;<a href=".././AliPHOSSDigitizer.html#AliPHOSSDigitizer:GetCalibrationParameter">GetCalibrationParameter</a>() ;
625   
626   return kTRUE ;
627
628 }
629 <b>//__________________________________________________________________</b>
630 <a name="AliPHOSDigitizer:MixWith"> </a><a href="../ListOfTypes.html#void">void</a> <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:MixWith">AliPHOSDigitizer::MixWith</a>(<a href="../ListOfTypes.html#char">char</a>* HeaderFile, <a href="../ListOfTypes.html#char">char</a>* SDigitsFile){
631 <b>//</b>
632
633   if(!<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fInitialized">fInitialized</a>)
634     <a href="#AliPHOSDigitizer:Init">Init</a>() ;
635
636
637   if(HeaderFile == 0){
638     cout &lt;&lt; "Specify at least header file to merge"&lt;&lt; endl ;
639     return ;
640   }
641   
642   <a href="../ListOfTypes.html#Int_t">Int_t</a> inputs ;
643   for(inputs = 0; inputs &lt; <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fNinputs">fNinputs</a> ; inputs++){
644     if(strcmp(((TObjString *)<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fHeaderFiles">fHeaderFiles</a>-&gt;At(inputs))-&gt;GetString(),HeaderFile) == 0 ){
645       if(SDigitsFile == 0){ 
646         if(((TObjString*)<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitsFiles">fSDigitsFiles</a>-&gt;At(inputs))-&gt;GetString().CompareTo("")  == 0){
647           cout &lt;&lt; "Entry already exists, do not add" &lt;&lt; endl ;
648           return ;
649         }
650       }
651       else
652         if(((TObjString*)<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitsFiles">fSDigitsFiles</a>-&gt;At(inputs))-&gt;GetString().Contains(SDigitsFile)){
653         cout &lt;&lt; "Entry already exists, do not add" &lt;&lt; endl ;
654         return;
655       }
656     }   
657   }  
658   
659   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fHeaderFiles">fHeaderFiles</a>-&gt;Expand(<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fNinputs">fNinputs</a>+1) ;
660   new((*<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fHeaderFiles">fHeaderFiles</a>)[<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fNinputs">fNinputs</a>]) TObjString(HeaderFile) ;
661
662   
663   TFile * file = new TFile(((TObjString *) <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fHeaderFiles">fHeaderFiles</a>-&gt;At(<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fNinputs">fNinputs</a>))-&gt;GetString()) ;  
664
665   file-&gt;cd() ;
666
667   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitsFiles">fSDigitsFiles</a>-&gt;Expand(<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fNinputs">fNinputs</a>+1) ;
668   new((*<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitsFiles">fSDigitsFiles</a>)[<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fNinputs">fNinputs</a>]) TObjString(SDigitsFile) ;
669 <b>  //Normally, branch names are modified to be "./xxx", so add this "./" </b>
670   <a href="../ListOfTypes.html#char">char</a> * base = new <a href="../ListOfTypes.html#char">char</a>[strlen(gAlice-&gt;GetBaseFile())+2];
671   sprintf(base,"%s/",gAlice-&gt;GetBaseFile());
672   if(!strstr(SDigitsFile,base) )
673     ((TObjString*) <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitsFiles">fSDigitsFiles</a>-&gt;At(<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fNinputs">fNinputs</a>))-&gt;GetString().Insert(0,base)  ;
674   delete base ;
675
676
677   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigits">fSDigits</a>-&gt;Expand(<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fNinputs">fNinputs</a>+1) ;
678   new((*<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigits">fSDigits</a>)[<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fNinputs">fNinputs</a>]) TClonesArray("<a href=".././AliPHOSDigit.html">AliPHOSDigit</a>",1000) ;
679
680   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fIevent">fIevent</a>-&gt;Set(<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fNinputs">fNinputs</a>+1) ;
681   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fIevent">fIevent</a>-&gt;AddAt(-1, <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fNinputs">fNinputs</a>) ;
682
683   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fIeventMax">fIeventMax</a>-&gt;Set(<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fNinputs">fNinputs</a>+1) ;  
684
685   TTree * te = (TTree *) file-&gt;Get("TE") ;
686   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fIeventMax">fIeventMax</a>-&gt;AddAt((<a href="../ListOfTypes.html#Int_t">Int_t</a>) te-&gt;GetEntries(), <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fNinputs">fNinputs</a> );
687
688   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fNinputs">fNinputs</a>++ ;
689   
690 }
691 <b>//__________________________________________________________________</b>
692 <a name="AliPHOSDigitizer:Print"> </a><a href="../ListOfTypes.html#void">void</a> <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:Print">AliPHOSDigitizer::Print</a>(<a href="../ListOfTypes.html#Option_t">Option_t</a>* option)const {
693
694   if(<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fInitialized">fInitialized</a>){
695     
696     cout &lt;&lt; "------------------- "&lt;&lt; GetName() &lt;&lt; " -------------" &lt;&lt; endl ;
697     cout &lt;&lt; "Digitizing sDigits from file(s): " &lt;&lt;endl ;
698     <a href="../ListOfTypes.html#Int_t">Int_t</a> input ;
699     for(input = 0; input &lt; <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fNinputs">fNinputs</a> ; input++) {
700       cout &lt;&lt; "          " &lt;&lt; ((TObjString *) <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fHeaderFiles">fHeaderFiles</a>-&gt;At(input))-&gt;GetString() &lt;&lt; 
701         "   Branch: " &lt;&lt; ((TObjString *) <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitsFiles">fSDigitsFiles</a>-&gt;At(input))-&gt;GetString() &lt;&lt; endl ;
702     }
703     cout &lt;&lt; endl ;
704     cout &lt;&lt; "Writing digits to " &lt;&lt; ((TObjString *) <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fHeaderFiles">fHeaderFiles</a>-&gt;At(0))-&gt;GetString() &lt;&lt; endl ;
705     
706     cout &lt;&lt; endl ;
707     cout &lt;&lt; "With following parameters: " &lt;&lt; endl ;
708     cout &lt;&lt; "     Electronics noise in EMC (<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fPinNoise">fPinNoise</a>) = " &lt;&lt; <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fPinNoise">fPinNoise</a> &lt;&lt; endl ;
709     cout &lt;&lt; "  Threshold  in EMC  (<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fEMCDigitThreshold">fEMCDigitThreshold</a>) = " &lt;&lt; <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fEMCDigitThreshold">fEMCDigitThreshold</a>  &lt;&lt; endl ; ;
710     cout &lt;&lt; "                 Noise in CPV (<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fCPVNoise">fCPVNoise</a>) = " &lt;&lt; <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fCPVNoise">fCPVNoise</a> &lt;&lt; endl ; 
711     cout &lt;&lt; "    Threshold in CPV (<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fCPVDigitThreshold">fCPVDigitThreshold</a>) = " &lt;&lt; <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fCPVDigitThreshold">fCPVDigitThreshold</a> &lt;&lt; endl ; 
712     cout &lt;&lt; "               Noise in PPSD (<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fPPSDNoise">fPPSDNoise</a>) = " &lt;&lt; <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fPPSDNoise">fPPSDNoise</a> &lt;&lt; endl ;
713     cout &lt;&lt; "  Threshold in PPSD (<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fPPSDDigitThreshold">fPPSDDigitThreshold</a>) = " &lt;&lt; <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fPPSDDigitThreshold">fPPSDDigitThreshold</a> &lt;&lt; endl ;
714     cout &lt;&lt; "---------------------------------------------------" &lt;&lt; endl ;
715   }
716   else
717     cout &lt;&lt; "<a href=".././AliPHOSDigitizer.html">AliPHOSDigitizer</a> not initialized " &lt;&lt; endl ;
718   
719 }
720 <b>//__________________________________________________________________</b>
721 <a name="AliPHOSDigitizer:PrintDigits"> </a><a href="../ListOfTypes.html#void">void</a> <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:PrintDigits">AliPHOSDigitizer::PrintDigits</a>(<a href="../ListOfTypes.html#Option_t">Option_t</a> * option){
722     
723   cout &lt;&lt; "AliPHOSDigitiser:"&lt;&lt; endl ;
724   cout &lt;&lt; "       Number of entries in Digits list " &lt;&lt; <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigits">fDigits</a>-&gt;GetEntriesFast() &lt;&lt; endl ;
725   cout &lt;&lt; endl ;
726   if(strstr(option,"all")){
727     
728 <b>    //loop over digits</b>
729     <a href=".././AliPHOSDigit.html">AliPHOSDigit</a> * digit;
730     cout &lt;&lt; "Digit Id " &lt;&lt; " Amplitude " &lt;&lt;  " Index "  &lt;&lt;  " Nprim " &lt;&lt; " Primaries list " &lt;&lt;  endl;      
731     <a href="../ListOfTypes.html#Int_t">Int_t</a> index ;
732     for (index = 0 ; index &lt; <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigits">fDigits</a>-&gt;GetEntries() ; index++) {
733       digit = (<a href=".././AliPHOSDigit.html">AliPHOSDigit</a> * )  <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigits">fDigits</a>-&gt;At(index) ;
734       cout &lt;&lt; setw(8)  &lt;&lt;  digit-&gt;GetId() &lt;&lt; " "  &lt;&lt;         setw(3)  &lt;&lt;  digit-&gt;GetAmp() &lt;&lt;   "  "  
735            &lt;&lt; setw(6)  &lt;&lt;  digit-&gt;GetIndexInList() &lt;&lt; "  "   
736            &lt;&lt; setw(5)  &lt;&lt;  digit-&gt;GetNprimary() &lt;&lt;"  ";
737       
738       <a href="../ListOfTypes.html#Int_t">Int_t</a> iprimary;
739       for (iprimary=0; iprimary&lt;digit-&gt;GetNprimary(); iprimary++)
740         cout &lt;&lt; setw(5)  &lt;&lt;  digit-&gt;GetPrimary(iprimary+1) &lt;&lt; " ";
741       cout &lt;&lt; endl;        
742     }
743     
744   }
745 }
746 <b>//__________________________________________________________________</b>
747 <a name="AliPHOSDigitizer:SetSDigitsBranch"> </a><a href="../ListOfTypes.html#void">void</a> <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:SetSDigitsBranch">AliPHOSDigitizer::SetSDigitsBranch</a>(const <a href="../ListOfTypes.html#char">char</a>* file){
748 <b>  // we set name of the SDigits branch file in the first! header file</b>
749   if(!<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fInitialized">fInitialized</a>)    <a href="#AliPHOSDigitizer:Init">Init</a>() ;
750
751   <a href="../ListOfTypes.html#char">char</a> * base = new <a href="../ListOfTypes.html#char">char</a>[strlen(gAlice-&gt;GetBaseFile())+2+strlen(file)];
752   sprintf(base,"%s/%s",gAlice-&gt;GetBaseFile(),file);
753   ((TObjString*) <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fSDigitsFiles">fSDigitsFiles</a>-&gt;At(0) )-&gt;SetString((<a href="../ListOfTypes.html#char">char</a>*)base) ;
754
755   delete base ;  
756 }
757 <b>//__________________________________________________________________</b>
758 <a name="AliPHOSDigitizer:SetDigitsBranch"> </a><a href="../ListOfTypes.html#void">void</a> <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:SetDigitsBranch">AliPHOSDigitizer::SetDigitsBranch</a>(const <a href="../ListOfTypes.html#char">char</a>* file){
759 <b>  //Sets the name of the file to which Digits branch will be diverted </b>
760   if(!<a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fInitialized">fInitialized</a>)    <a href="#AliPHOSDigitizer:Init">Init</a>() ;
761
762   <a href="../ListOfTypes.html#char">char</a> * base = new <a href="../ListOfTypes.html#char">char</a>[strlen(gAlice-&gt;GetBaseFile())+2+strlen(file)];
763   sprintf(base,"%s/%s",gAlice-&gt;GetBaseFile(),file);
764   <a href=".././AliPHOSDigitizer.html#AliPHOSDigitizer:fDigitsFile">fDigitsFile</a> = base ;
765   delete base ;
766 }
767 </pre>
768
769 <!--SIGNATURE-->
770 <br>
771 <address>
772 <hr>
773 <center>
774 <a href="http://root.cern.ch/root/Welcome.html">ROOT page</a> - <a href="../ClassIndex.html">Class index</a> - <a href="#TopOfPage">Top of the page</a><br>
775 </center>
776 <hr>This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to <a href="mailto:rootdev@root.cern.ch">ROOT support</a>, or contact <a href="mailto:rootdev@root.cern.ch">the developers</a> with any questions or problems regarding ROOT.
777 </address>
778 </body>
779 </html>