]> git.uio.no Git - u/mrichter/AliRoot.git/blame - FASTSIM/AliFastDetector.cxx
Base classes for fast simulation. First commit.
[u/mrichter/AliRoot.git] / FASTSIM / AliFastDetector.cxx
CommitLineData
f38bbb0b 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*/
19
20
21#include "AliFastDetector.h"
22#include "AliFastResponse.h"
23#include "AliGeometry.h"
24
25#include <TList.h>
26#include <TIterator.h>
27#include <TString.h>
28
29ClassImp(AliFastDetector)
30AliFastDetector::AliFastDetector()
31{
32// Default Constructor
33 fName = "FastDetector";
34 fTitle = "Fast Detector Base Class";
35 fLnkD = 0;
36 fLnkR = 0;
37
38 fResponses = 0;
39 fSubdetectors = 0;
40}
41
42AliFastDetector::AliFastDetector(char* Name, char* Title):
43 TNamed(Name, Title)
44{
45// Constructor
46 fSubdetectors = new TList();
47 fResponses = new TList();
48}
49
50AliFastDetector::~AliFastDetector()
51{
52// Destructor
53 delete fSubdetectors;
54 delete fResponses;
55}
56
57
58void AliFastDetector::Init()
59{
60//
61// Initialisation
62//
63 TIter nextRes(fResponses);
64 AliFastResponse *res;
65 //
66 // Loop over responses and initialize
67 while((res = (AliFastResponse*)nextRes())) {
68 res->Init();
69 }
70
71 TIter nextDet(fSubdetectors);
72 AliFastDetector *det;
73 //
74 // Loop over subdetectors and initialize
75 while((det = (AliFastDetector*)nextDet())) {
76 det->Init();
77 }
78 //
79 TObject* obj;
80
81 if ((obj = fResponses->FindObject("Efficiency")))
82 {
83
84 fEfficiency = (AliFastResponse*) obj;
85 printf("Detector %s provides Efficiency: %s\n",
86 fName.Data(), fEfficiency->GetTitle());
87 }
88
89 if ((obj = fResponses->FindObject("Resolution")))
90 {
91 fResolution = (AliFastResponse*) obj;
92 printf("Detector %s provides Resolution: %s\n",
93 fName.Data(), fResolution->GetTitle());
94 }
95}
96
97Float_t AliFastDetector::EvaluateEfficiency(AliFastParticle* part)
98{
99 TIter nextDet(fSubdetectors);
100 AliFastDetector *det;
101 //
102 // Loop over subdetectors
103 Float_t eff = 1;
104 while((det = (AliFastDetector*)nextDet())) {
105 eff *= det->EvaluateEfficiency(part);
106 }
107 return eff;
108}
109
110Bool_t AliFastDetector::EvaluateAcceptance(AliFastParticle* part)
111{
112 //
113 // Loop over subdetectors
114 Bool_t acc = kFALSE;
115
116 if (fSubdetectors) {
117 TIter nextDet(fSubdetectors);
118 AliFastDetector *det;
119 while((det = (AliFastDetector*)nextDet()) && !acc) {
120 acc = (acc || det->EvaluateAcceptance(part));
121 }
122 } else {
123 if (fGeometry)
124 acc = fGeometry->Impact((TParticle*) part);
125 }
126
127 return acc;
128}
129
130void AliFastDetector::EvaluateResponse(AliFastParticle* part)
131{
132 ;
133}
134
135void AliFastDetector::
136AddSubdetector(AliFastDetector *Detector, char* Name)
137{
138//
139// Add detector to list
140 fSubdetectors->Add(Detector);
141}
142
143
144
145void AliFastDetector::
146AddResponse(AliFastResponse *Response)
147{
148//
149// Add detector to list
150 fResponses->Add(Response);
151}
152
153
154AliFastDetector* AliFastDetector::FirstSubdetector()
155{
156// Iterator over generators: Initialisation
157 fLnkD = fSubdetectors->FirstLink();
158 if (fLnkD) {
159 return (AliFastDetector*) (fLnkD->GetObject());
160 } else {
161 return 0;
162 }
163}
164
165AliFastDetector* AliFastDetector::NextSubdetector()
166{
167// Iterator over generators: Increment
168 fLnkD = fLnkD->Next();
169 if (fLnkD) {
170 return (AliFastDetector*) (fLnkD->GetObject());
171 } else {
172 return 0;
173 }
174}
175
176
177AliFastResponse* AliFastDetector::FirstResponse()
178{
179// Iterator over generators: Initialisation
180 fLnkR = fResponses->FirstLink();
181 if (fLnkR) {
182 return (AliFastResponse*) (fLnkR->GetObject());
183 } else {
184 return 0;
185 }
186}
187
188AliFastResponse* AliFastDetector::NextResponse()
189{
190// Iterator over generators: Increment
191 fLnkR = fLnkR->Next();
192 if (fLnkR) {
193 return (AliFastResponse*) (fLnkR->GetObject());
194 } else {
195 return 0;
196 }
197}
198
199