Transition to NewIO
[u/mrichter/AliRoot.git] / FASTSIM / AliFastDetector.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /*
17 $Log$
18 Revision 1.3.4.1  2002/11/26 16:56:30  hristov
19 Merging NewIO with v3-09-04
20
21 Revision 1.3  2002/11/07 09:07:07  hristov
22 Adding FASTSIM code (lost during the merge with VMC)
23
24 Revision 1.1  2002/09/20 13:32:51  morsch
25 Base classes for fast simulation. First commit.
26
27 */
28
29
30 #include "AliFastDetector.h"
31 #include "AliFastResponse.h"
32 #include "AliGeometry.h"
33
34 #include <TList.h>
35 #include <TIterator.h>
36 #include <TString.h>
37
38 ClassImp(AliFastDetector)
39 AliFastDetector::AliFastDetector()
40 {
41 // Default Constructor
42     fName  = "FastDetector";
43     fTitle = "Fast Detector Base Class";
44     fLnkD  = 0;
45     fLnkR  = 0;
46     
47     fResponses    = 0;
48     fSubdetectors = 0;
49 }
50
51 AliFastDetector::AliFastDetector(char* Name, char* Title):
52     TNamed(Name, Title)
53 {
54 // Constructor
55     fSubdetectors = new TList();
56     fResponses    = new TList();
57 }
58
59 AliFastDetector::~AliFastDetector()
60 {
61 // Destructor
62     delete fSubdetectors;
63     delete fResponses;
64 }
65
66
67 void AliFastDetector::Init()
68 {
69 //
70 // Initialisation
71 //
72     TIter nextRes(fResponses);
73     AliFastResponse *res;
74     //
75     // Loop over responses  and initialize
76     while((res = (AliFastResponse*)nextRes())) {
77         res->Init();
78     }  
79
80     TIter nextDet(fSubdetectors);
81     AliFastDetector *det;
82     //
83     // Loop over subdetectors  and initialize
84     while((det = (AliFastDetector*)nextDet())) {
85         det->Init();
86     }  
87     //
88     TObject* obj;
89     
90     if ((obj = fResponses->FindObject("Efficiency")))
91     {
92
93         fEfficiency = (AliFastResponse*) obj;
94         printf("Detector %s provides Efficiency: %s\n",
95                fName.Data(), fEfficiency->GetTitle());
96     }
97     
98     if ((obj = fResponses->FindObject("Resolution"))) 
99     {
100         fResolution = (AliFastResponse*) obj;
101         printf("Detector %s provides Resolution: %s\n",
102                fName.Data(), fResolution->GetTitle());
103     }
104 }
105
106 Float_t AliFastDetector::EvaluateEfficiency(AliFastParticle* part)
107 {
108     TIter nextDet(fSubdetectors);
109     AliFastDetector *det;
110     //
111     // Loop over subdetectors  
112     Float_t eff = 1;
113     while((det = (AliFastDetector*)nextDet())) {
114         eff *= det->EvaluateEfficiency(part);
115     }  
116     return eff;
117 }
118
119 Bool_t  AliFastDetector::EvaluateAcceptance(AliFastParticle* part)
120 {
121     //
122     // Loop over subdetectors 
123     Bool_t acc = kFALSE;
124
125     if (fSubdetectors) {
126         TIter nextDet(fSubdetectors);
127         AliFastDetector *det;
128         while((det = (AliFastDetector*)nextDet()) && !acc) {
129             acc = (acc ||  det->EvaluateAcceptance(part));
130         }  
131     } else {
132         if (fGeometry)
133         acc = fGeometry->Impact((TParticle*) part);
134     }
135     
136     return acc;
137 }
138
139 void    AliFastDetector::EvaluateResponse(AliFastParticle* part)
140 {
141     ;
142 }
143
144 void AliFastDetector::
145 AddSubdetector(AliFastDetector *Detector, char* Name)
146 {
147 //
148 //  Add detector to list   
149      fSubdetectors->Add(Detector);
150 }
151
152
153
154 void AliFastDetector::
155 AddResponse(AliFastResponse *Response)
156 {
157 //
158 //  Add detector to list   
159      fResponses->Add(Response);
160 }
161
162
163 AliFastDetector*  AliFastDetector::FirstSubdetector()
164 {
165 // Iterator over generators: Initialisation
166     fLnkD = fSubdetectors->FirstLink();
167     if (fLnkD) {
168         return (AliFastDetector*) (fLnkD->GetObject());
169     } else {
170         return 0;
171     }
172 }
173
174 AliFastDetector*  AliFastDetector::NextSubdetector()
175 {
176 // Iterator over generators: Increment
177     fLnkD = fLnkD->Next();
178     if (fLnkD) {
179         return (AliFastDetector*) (fLnkD->GetObject());
180     } else {
181         return 0;
182     }
183 }
184
185
186 AliFastResponse*  AliFastDetector::FirstResponse()
187 {
188 // Iterator over generators: Initialisation
189     fLnkR = fResponses->FirstLink();
190     if (fLnkR) {
191         return (AliFastResponse*) (fLnkR->GetObject());
192     } else {
193         return 0;
194     }
195 }
196
197 AliFastResponse*  AliFastDetector::NextResponse()
198 {
199 // Iterator over generators: Increment
200     fLnkR = fLnkR->Next();
201     if (fLnkR) {
202         return (AliFastResponse*) (fLnkR->GetObject());
203     } else {
204         return 0;
205     }
206 }
207
208