1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | #include "GlueXSensitiveDetectorDIRC.hh" |
8 | #include "GlueXDetectorConstruction.hh" |
9 | #include "GlueXPrimaryGeneratorAction.hh" |
10 | #include "GlueXUserEventInformation.hh" |
11 | #include "GlueXUserTrackInformation.hh" |
12 | #include "GlueXUserOptions.hh" |
13 | #include "HddmOutput.hh" |
14 | |
15 | #include "G4VPhysicalVolume.hh" |
16 | #include "G4PVPlacement.hh" |
17 | #include "G4EventManager.hh" |
18 | #include "G4HCofThisEvent.hh" |
19 | #include "G4Step.hh" |
20 | #include "G4SDManager.hh" |
21 | #include "G4ios.hh" |
22 | #include "G4TransportationManager.hh" |
23 | #include "G4ParallelWorldProcess.hh" |
24 | |
25 | #include <JANA/JApplication.h> |
26 | |
27 | |
28 | #define OPTICAL_PHOTON50 50 |
29 | |
30 | |
31 | int GlueXSensitiveDetectorDIRC::MAX_HITS = 1000; |
32 | int GlueXSensitiveDetectorDIRC::MAX_PIXELS = 6912; |
33 | |
34 | |
35 | double GlueXSensitiveDetectorDIRC::TWO_HIT_TIME_RESOL = 50*ns; |
36 | |
37 | int GlueXSensitiveDetectorDIRC::instanceCount = 0; |
38 | G4Mutex GlueXSensitiveDetectorDIRC::fMutex = G4MUTEX_INITIALIZER{ { 0, 0, 0, 0, 0, 0, 0, { 0, 0 } } }; |
39 | |
40 | TGraph *GlueXSensitiveDetectorDIRC::fDetEff = 0; |
41 | |
42 | GlueXSensitiveDetectorDIRC::GlueXSensitiveDetectorDIRC(const G4String& name) |
43 | : G4VSensitiveDetector(name) |
44 | { |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | G4AutoLock barrier(&fMutex); |
52 | if (instanceCount++ == 0) { |
53 | int runno = HddmOutput::getRunNo(); |
54 | extern jana::JApplication *japp; |
55 | if (japp == 0) { |
56 | G4cerr(*G4cerr_p) << "Error in GlueXSensitiveDetector constructor - " |
57 | << "jana global DApplication object not set, " |
58 | << "cannot continue." << G4endlstd::endl; |
59 | exit(-1); |
60 | } |
61 | jana::JCalibration *jcalib = japp->GetJCalibration(runno); |
| Value stored to 'jcalib' during its initialization is never read |
62 | if (japp == 0) { |
63 | jcalib = 0; |
64 | G4cout(*G4cout_p) << "DIRC: ALL parameters loaded from ccdb" << G4endlstd::endl; |
65 | } |
66 | } |
67 | |
68 | GlueXUserOptions *user_opts = GlueXUserOptions::GetInstance(); |
69 | std::map<int, int> dirclutpars; |
70 | if (user_opts->Find("DIRCLUT", dirclutpars)) { |
71 | fLutId = dirclutpars[1]; |
72 | } |
73 | else { |
74 | fLutId = 100; |
75 | } |
76 | std::map<int, int> dircledpars; |
77 | if (user_opts->Find("DIRCLED", dircledpars)){ |
78 | fLED = true; |
79 | } |
80 | else { |
81 | fLED = false; |
82 | } |
83 | |
84 | } |
85 | |
86 | GlueXSensitiveDetectorDIRC::GlueXSensitiveDetectorDIRC(const GlueXSensitiveDetectorDIRC &src) |
87 | : G4VSensitiveDetector(src) |
88 | { |
89 | G4AutoLock barrier(&fMutex); |
90 | ++instanceCount; |
91 | } |
92 | |
93 | GlueXSensitiveDetectorDIRC &GlueXSensitiveDetectorDIRC::operator=(const |
94 | GlueXSensitiveDetectorDIRC &src) |
95 | { |
96 | G4AutoLock barrier(&fMutex); |
97 | *(G4VSensitiveDetector*)this = src; |
98 | return *this; |
99 | } |
100 | |
101 | GlueXSensitiveDetectorDIRC::~GlueXSensitiveDetectorDIRC() |
102 | { |
103 | G4AutoLock barrier(&fMutex); |
104 | --instanceCount; |
105 | } |
106 | |
107 | void GlueXSensitiveDetectorDIRC::Initialize(G4HCofThisEvent* hce) |
108 | { |
109 | } |
110 | |
111 | G4bool GlueXSensitiveDetectorDIRC::ProcessHits(G4Step* step, |
112 | G4TouchableHistory* ROhist) |
113 | { |
114 | |
115 | const G4ThreeVector &pin = step->GetPreStepPoint()->GetMomentum(); |
116 | const G4ThreeVector &xin = step->GetPreStepPoint()->GetPosition(); |
117 | const G4ThreeVector &xout = step->GetPostStepPoint()->GetPosition(); |
118 | double Ein = step->GetPreStepPoint()->GetTotalEnergy(); |
119 | double tin = step->GetPreStepPoint()->GetGlobalTime(); |
120 | double tout = step->GetPostStepPoint()->GetGlobalTime(); |
121 | G4ThreeVector x = (xin + xout) / 2; |
122 | G4ThreeVector dx = xout - xin; |
123 | double t = (tin + tout) / 2; |
124 | |
125 | const G4VTouchable* touch = step->GetPreStepPoint()->GetTouchable(); |
126 | const G4TouchableHistory* touch_hist = (G4TouchableHistory*)touch; |
127 | const G4AffineTransform &local_from_global = touch->GetHistory()->GetTopTransform(); |
128 | G4ThreeVector xlocal = local_from_global.TransformPoint(x); |
129 | |
130 | |
131 | |
132 | |
133 | |
134 | |
135 | |
136 | if (tout > 1.0*s) t = tin; |
137 | |
138 | |
139 | |
140 | |
141 | G4Track *track = step->GetTrack(); |
142 | GlueXUserTrackInformation *trackinfo = (GlueXUserTrackInformation*) |
143 | track->GetUserInformation(); |
144 | int itrack = trackinfo->GetGlueXTrackID(); |
145 | G4String volname = touch->GetVolume()->GetName(); |
146 | |
147 | |
148 | int ibar = 10*((int)volname(1,1)(0)-48)+(int)volname(2,1)(0)-48; |
149 | if (volname(0,1)(0) == 'B' && ibar >= 0 && ibar < 48) { |
150 | |
151 | if (trackinfo->GetGlueXHistory() == 0 && itrack > 0 && xin.dot(pin) > 0) { |
152 | int pdgtype = track->GetDynamicParticle()->GetPDGcode(); |
153 | int g3type = GlueXPrimaryGeneratorAction::ConvertPdgToGeant3(pdgtype); |
154 | |
155 | GlueXHitDIRCBar barhit; |
156 | barhit.E_GeV = Ein/GeV; |
157 | barhit.t_ns = t/ns; |
158 | barhit.x_cm = x[0]/cm; |
159 | barhit.y_cm = x[1]/cm; |
160 | barhit.z_cm = x[2]/cm; |
161 | barhit.px_GeV = pin[0]/GeV; |
162 | barhit.py_GeV = pin[1]/GeV; |
163 | barhit.pz_GeV = pin[2]/GeV; |
164 | barhit.pdg = g3type; |
165 | barhit.bar = ibar; |
166 | barhit.track = itrack; |
167 | fHitsBar.push_back(barhit); |
168 | } |
169 | return true; |
170 | } |
171 | |
172 | |
173 | |
174 | if (volname == "WM1N" || volname == "WM2N" || volname == "WM1S" || volname == "WM2S" || |
175 | volname == "FTMN" || volname == "FTMS" || |
176 | volname == "TM1N" || volname == "TM2N" || volname == "TM3N" || |
177 | volname == "TM1S" || volname == "TM2S" || volname == "TM3S" || |
178 | volname == "SM1N" || volname == "SM2N" || volname == "SM1S" || volname == "SM2S" || |
179 | volname == "OWDG" || |
180 | (volname(0,1)(0) == 'A' && volname(0,1)(1) == 'G') ) |
181 | { |
182 | |
183 | GlueXHitDIRCWob wobhit; |
184 | wobhit.track = track->GetTrackID(); |
185 | |
186 | |
187 | G4int hNavId = G4ParallelWorldProcess::GetHypNavigatorID(); |
188 | std::vector<G4Navigator*>::iterator iNav = |
189 | G4TransportationManager::GetTransportationManager()->GetActiveNavigatorsIterator(); |
190 | |
191 | G4bool valid; |
192 | G4ThreeVector localNormal = (iNav[hNavId])->GetLocalExitNormal(&valid); |
193 | if (valid){ |
194 | int mid=-1; |
195 | if (volname == "OWDG") { |
196 | if (localNormal.y()<-0.999) |
197 | mid=1; |
198 | else if (localNormal.y()>0.999) |
199 | mid=2; |
200 | else if(localNormal.z()>0.999) |
201 | mid=3; |
202 | else if(fabs(localNormal.z()+0.86)<0.01) |
203 | mid=4; |
204 | } |
205 | if (volname == "SM1N" || volname == "SM1S") |
206 | mid = 5; |
207 | if (volname == "SM2N" || volname == "SM2S") |
208 | mid = 6; |
209 | if (volname == "WM1N" || volname == "WM1S") |
210 | mid = 7; |
211 | if (volname == "WM2N" || volname == "WM2S") |
212 | mid = 8; |
213 | if (volname == "FTMN" || volname == "FTMS") |
214 | mid = 0; |
215 | if (volname == "TM1N" || volname == "TM1S") |
216 | mid=91; |
217 | if (volname == "TM2N" || volname == "TM2S") |
218 | mid=92; |
219 | if (volname == "TM3N" || volname == "TM3S") |
220 | mid=93; |
221 | if ((volname(0,1)(0) == 'A' && volname(0,1)(1) == 'G')) |
222 | mid=100; |
223 | |
224 | if (mid!=-1) { |
225 | G4double normalId = mid; |
226 | wobhit.normalId = normalId; |
227 | fHitsWob.push_back(wobhit); |
228 | } |
229 | } |
230 | return true; |
231 | } |
232 | |
233 | |
234 | if (volname == "PIXV") { |
235 | if ((int)fHitsPmt.size() < MAX_HITS) { |
236 | |
237 | |
238 | double tracklen=track->GetTrackLength()/cm; |
239 | double en=Ein/GeV; |
240 | double refindex= 1.43603+0.0132404*en-0.00225287*en*en+0.000500109*en*en*en; |
241 | double time_fixed=tracklen/(29.9792458/refindex); |
242 | |
243 | #ifdef DIRC_CHECK_PROPAGATION_TIME |
244 | double l_QZBL = 9.1 + 0.96 + 122.5; |
245 | double l_EPOTEK = 0.005 + 8 * 0.005; |
246 | double l_AIR = 2 * 0.01; |
247 | double l_H2O = tracklen - l_QZBL - l_EPOTEK - l_AIR; |
248 | |
249 | |
250 | double angle = 45/180*3.14159; |
251 | double time_propagated = l_QZBL/(29.9792458/1.476)/cos(angle); |
252 | time_propagated += l_EPOTEK/(29.9792458/1.616)/cos(angle); |
253 | time_propagated += l_AIR/(29.9792458)/cos(angle); |
254 | time_propagated += l_H2O/(29.9792458/1.343); |
255 | G4cout(*G4cout_p)<<"Propagated time = "<<time_propagated<<" and measured time = "<<t/ns<<G4endlstd::endl; |
256 | #endif |
257 | |
258 | GlueXHitDIRCPmt pmthit; |
259 | pmthit.E_GeV = Ein/GeV; |
260 | pmthit.t_ns = t/ns; |
261 | pmthit.t_fixed_ns = time_fixed; |
262 | pmthit.x_cm = x[0]/cm; |
263 | pmthit.y_cm = x[1]/cm; |
264 | pmthit.z_cm = x[2]/cm; |
265 | |
266 | double box = touch_hist->GetReplicaNumber(1)-1; |
267 | double pix = touch_hist->GetReplicaNumber(0)-1; |
268 | |
269 | pmthit.ch = box*MAX_PIXELS + pix; |
270 | |
271 | pmthit.key_bar = -999; |
272 | for (unsigned int i=0;i<fHitsBar.size();i++){ |
273 | if (fHitsBar[i].track == track->GetParentID()) { |
274 | pmthit.key_bar = fHitsBar[i].bar; |
275 | } |
276 | } |
277 | pmthit.track = track->GetParentID(); |
278 | |
279 | int64_t pathId1 = 0; |
280 | int64_t pathId2 = 0; |
281 | int mid, refl=0; |
282 | pmthit.bbrefl = false; |
283 | for (unsigned int i=0;i<fHitsWob.size();i++) { |
284 | if (fHitsWob[i].track == track->GetTrackID()) { |
285 | mid =fHitsWob[i].normalId; |
286 | if (mid>=100) { |
287 | pmthit.bbrefl = true; |
288 | continue; |
289 | } |
290 | refl++; |
291 | if (refl <= 18) { |
292 | if (mid<10) |
293 | pathId1 = pathId1*10 + mid; |
294 | else |
295 | pathId1 = pathId1*100 + mid; |
296 | } |
297 | else if (refl > 18 && refl < 26) { |
298 | if (mid<10) |
299 | pathId2 = pathId2*10 + mid; |
300 | else |
301 | pathId2 = pathId2*100 + mid; |
302 | } |
303 | } |
304 | } |
305 | int64_t pathId=pathId1+pathId2; |
306 | if (refl>19) |
307 | pathId *=-1; |
308 | |
309 | pmthit.path = pathId; |
310 | pmthit.refl = refl; |
311 | |
312 | if (fLutId<48) { |
313 | |
314 | pmthit.key_bar = fLutId; |
315 | } |
316 | fHitsPmt.push_back(pmthit); |
317 | } |
318 | else { |
319 | G4cerr(*G4cerr_p) << "GlueXSensitiveDetectorDIRC::ProcessHits error: " |
320 | << "max hit count " << MAX_HITS << " exceeded, truncating!" |
321 | << G4endlstd::endl; |
322 | } |
323 | } |
324 | return true; |
325 | } |
326 | |
327 | void GlueXSensitiveDetectorDIRC::EndOfEvent(G4HCofThisEvent*) |
328 | { |
329 | if ((fHitsBar.size() == 0 && !(fLutId<48) && !fLED) || (fHitsBar.size() == 0 && !fLED) || fHitsPmt.size() == 0 || (fHitsWob.size() == 0 && !fLED)) |
330 | { |
331 | |
332 | fHitsBar.clear(); |
333 | fHitsPmt.clear(); |
334 | fHitsWob.clear(); |
335 | return; |
336 | } |
337 | |
338 | if (verboseLevel > 1) { |
339 | G4cout(*G4cout_p) << G4endlstd::endl |
340 | << "--------> Hits Collection: in this event there are " |
341 | << fHitsBar.size() << " bar hits:" |
342 | << G4endlstd::endl; |
343 | for(unsigned int h=0; h<fHitsBar.size(); h++) |
344 | fHitsBar[h].Print(); |
345 | |
346 | G4cout(*G4cout_p) << G4endlstd::endl |
347 | << "--------> Hits Collection: in this event there are " |
348 | << fHitsPmt.size() << " PMT hits: " |
349 | << G4endlstd::endl; |
350 | for(unsigned int h=0; h<fHitsPmt.size(); h++) |
351 | fHitsPmt[h].Print(); |
352 | } |
353 | |
354 | |
355 | |
356 | G4EventManager* mgr = G4EventManager::GetEventManager(); |
357 | G4VUserEventInformation* info = mgr->GetUserInformation(); |
358 | hddm_s::HDDM *record = ((GlueXUserEventInformation*)info)->getOutputRecord(); |
359 | if (record == 0) { |
360 | G4cerr(*G4cerr_p) << "GlueXSensitiveDetectorDIRC::EndOfEvent error - " |
361 | << "hits seen but no output hddm record to save them into, " |
362 | << "cannot continue!" << G4endlstd::endl; |
363 | exit(1); |
364 | } |
365 | |
366 | if (record->getPhysicsEvents().size() == 0) record->addPhysicsEvents(); |
367 | if (record->getHitViews().size() == 0) record->getPhysicsEvent().addHitViews(); |
368 | hddm_s::HitView &hitview = record->getPhysicsEvent().getHitView(); |
369 | if (hitview.getDIRCs().size() == 0) hitview.addDIRCs(); |
370 | hddm_s::DIRC &dirc = hitview.getDIRC(); |
371 | |
372 | |
373 | for(unsigned int h=0; h<fHitsBar.size(); h++){ |
374 | hddm_s::DircTruthBarHitList bhit = dirc.addDircTruthBarHits(1); |
375 | bhit(0).setE(fHitsBar[h].E_GeV); |
376 | bhit(0).setT(fHitsBar[h].t_ns); |
377 | bhit(0).setX(fHitsBar[h].x_cm); |
378 | bhit(0).setY(fHitsBar[h].y_cm); |
379 | bhit(0).setZ(fHitsBar[h].z_cm); |
380 | bhit(0).setPx(fHitsBar[h].px_GeV); |
381 | bhit(0).setPy(fHitsBar[h].py_GeV); |
382 | bhit(0).setPz(fHitsBar[h].pz_GeV); |
383 | bhit(0).setPdg(fHitsBar[h].pdg); |
384 | bhit(0).setBar(fHitsBar[h].bar); |
385 | bhit(0).setTrack(fHitsBar[h].track); |
386 | } |
387 | |
388 | |
389 | for(unsigned int h=0; h<fHitsPmt.size(); h++){ |
390 | hddm_s::DircTruthPmtHitList mhit = dirc.addDircTruthPmtHits(1); |
391 | mhit(0).setE(fHitsPmt[h].E_GeV); |
392 | mhit(0).setT(fHitsPmt[h].t_ns); |
393 | mhit(0).setX(fHitsPmt[h].x_cm); |
394 | mhit(0).setY(fHitsPmt[h].y_cm); |
395 | mhit(0).setZ(fHitsPmt[h].z_cm); |
396 | mhit(0).setCh(fHitsPmt[h].ch); |
397 | mhit(0).setKey_bar(fHitsPmt[h].key_bar); |
398 | #if DIRCTRUTHEXTRA1 |
399 | hddm_s::DircTruthPmtHitExtraList mhitextra = mhit(0).addDircTruthPmtHitExtras(1); |
400 | mhitextra(0).setT_fixed(fHitsPmt[h].t_fixed_ns); |
401 | mhitextra(0).setPath(fHitsPmt[h].path); |
402 | mhitextra(0).setRefl(fHitsPmt[h].refl); |
403 | mhitextra(0).setBbrefl(fHitsPmt[h].bbrefl); |
404 | #endif |
405 | } |
406 | |
407 | fHitsBar.clear(); |
408 | fHitsPmt.clear(); |
409 | fHitsWob.clear(); |
410 | } |
411 | |
412 | int GlueXSensitiveDetectorDIRC::GetIdent(std::string div, |
413 | const G4VTouchable *touch) |
414 | { |
415 | const HddsG4Builder* bldr = GlueXDetectorConstruction::GetBuilder(); |
416 | std::map<std::string, std::vector<int> >::const_iterator iter; |
417 | std::map<std::string, std::vector<int> > *identifiers; |
418 | int max_depth = touch->GetHistoryDepth(); |
419 | for (int depth = 0; depth < max_depth; ++depth) { |
420 | G4VPhysicalVolume *pvol = touch->GetVolume(depth); |
421 | G4LogicalVolume *lvol = pvol->GetLogicalVolume(); |
422 | int volId = fVolumeTable[lvol]; |
423 | if (volId == 0) { |
424 | volId = bldr->getVolumeId(lvol); |
425 | fVolumeTable[lvol] = volId; |
426 | } |
427 | identifiers = &Refsys::fIdentifierTable[volId]; |
428 | if ((iter = identifiers->find(div)) != identifiers->end()) { |
429 | int copyNum = touch->GetCopyNumber(depth); |
430 | copyNum += (dynamic_cast<G4PVPlacement*>(pvol))? -1 : 0; |
431 | return iter->second[copyNum]; |
432 | } |
433 | } |
434 | return -1; |
435 | } |
436 | |
437 | double GlueXSensitiveDetectorDIRC::GetDetectionEfficiency(double energy) |
438 | { |
439 | if (fDetEff == 0) |
440 | InitializeDetEff(); |
441 | double wavelength = CLHEP::hbarc * CLHEP::twopi / energy; |
442 | return fDetEff->Eval(wavelength / nm); |
443 | } |
444 | |
445 | void GlueXSensitiveDetectorDIRC::InitializeDetEff() |
446 | { |
447 | G4AutoLock barrier(&fMutex); |
448 | if (fDetEff != 0) |
449 | return; |
450 | |
451 | |
452 | |
453 | double fEfficiency[1000] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
454 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
455 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
456 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
457 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
458 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
459 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
460 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
461 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
462 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
463 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
464 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
465 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
466 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
467 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
468 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
469 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
470 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
471 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
472 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
473 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
474 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
475 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
476 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
477 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
478 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
479 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
480 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
481 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
482 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
483 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
484 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
485 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
486 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
487 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
488 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
489 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
490 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
491 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
492 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
493 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
494 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
495 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
496 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
497 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
498 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
499 | 0.196823, 0.202016, 0.206993, 0.211762, 0.216329, |
500 | 0.220700, 0.224884, 0.228885, 0.232711, 0.236366, |
501 | 0.239858, 0.243192, 0.246373, 0.249408, 0.252301, |
502 | 0.255058, 0.257683, 0.260182, 0.262560, 0.264822, |
503 | 0.266971, 0.269013, 0.270951, 0.272791, 0.274535, |
504 | 0.276189, 0.277756, 0.279239, 0.280643, 0.281971, |
505 | 0.283227, 0.284413, 0.285534, 0.286592, 0.287590, |
506 | 0.288531, 0.289419, 0.290255, 0.291043, 0.291785, |
507 | 0.292484, 0.293142, 0.293762, 0.294345, 0.294894, |
508 | 0.295412, 0.295899, 0.296358, 0.296791, 0.297200, |
509 | 0.297585, 0.297950, 0.298296, 0.298624, 0.298935, |
510 | 0.299231, 0.299514, 0.299784, 0.300043, 0.300291, |
511 | 0.300531, 0.300763, 0.300988, 0.301206, 0.301420, |
512 | 0.301629, 0.301835, 0.302038, 0.302238, 0.302437, |
513 | 0.302636, 0.302833, 0.303031, 0.303230, 0.303429, |
514 | 0.303630, 0.303832, 0.304037, 0.304244, 0.304453, |
515 | 0.304666, 0.304881, 0.305099, 0.305321, 0.305545, |
516 | 0.305774, 0.306005, 0.306240, 0.306478, 0.306720, |
517 | 0.306964, 0.307212, 0.307463, 0.307717, 0.307973, |
518 | 0.308232, 0.308493, 0.308756, 0.309022, 0.309288, |
519 | 0.309557, 0.309826, 0.310096, 0.310367, 0.310637, |
520 | 0.310908, 0.311178, 0.311447, 0.311715, 0.311981, |
521 | 0.312245, 0.312507, 0.312766, 0.313022, 0.313274, |
522 | 0.313522, 0.313766, 0.314005, 0.314238, 0.314466, |
523 | 0.314688, 0.314903, 0.315111, 0.315311, 0.315504, |
524 | 0.315688, 0.315863, 0.316029, 0.316185, 0.316331, |
525 | 0.316466, 0.316590, 0.316703, 0.316804, 0.316893, |
526 | 0.316968, 0.317031, 0.317080, 0.317114, 0.317135, |
527 | 0.317140, 0.317130, 0.317105, 0.317063, 0.317005, |
528 | 0.316931, 0.316839, 0.316729, 0.316602, 0.316457, |
529 | 0.316292, 0.316109, 0.315907, 0.315686, 0.315444, |
530 | 0.315182, 0.314900, 0.314598, 0.314274, 0.313929, |
531 | 0.313563, 0.313175, 0.312765, 0.312333, 0.311878, |
532 | 0.311402, 0.310902, 0.310379, 0.309834, 0.309265, |
533 | 0.308673, 0.308057, 0.307418, 0.306755, 0.306068, |
534 | 0.305357, 0.304622, 0.303863, 0.303080, 0.302273, |
535 | 0.301442, 0.300586, 0.299706, 0.298802, 0.297874, |
536 | 0.296921, 0.295944, 0.294943, 0.293918, 0.292869, |
537 | 0.291796, 0.290699, 0.289579, 0.288434, 0.287266, |
538 | 0.286075, 0.284860, 0.283623, 0.282362, 0.281078, |
539 | 0.279772, 0.278443, 0.277093, 0.275720, 0.274325, |
540 | 0.272908, 0.271470, 0.270012, 0.268532, 0.267031, |
541 | 0.265510, 0.263970, 0.262409, 0.260829, 0.259229, |
542 | 0.257611, 0.255974, 0.254319, 0.252646, 0.250956, |
543 | 0.249248, 0.247524, 0.245782, 0.244025, 0.242252, |
544 | 0.240464, 0.238661, 0.236843, 0.235011, 0.233165, |
545 | 0.231306, 0.229433, 0.227549, 0.225652, 0.223743, |
546 | 0.221823, 0.219892, 0.217951, 0.216000, 0.214040, |
547 | 0.212070, 0.210092, 0.208105, 0.206111, 0.204110, |
548 | 0.202102, 0.200087, 0.198067, 0.196041, 0.194011, |
549 | 0.191976, 0.189937, 0.187894, 0.185849, 0.183801, |
550 | 0.181750, 0.179699, 0.177646, 0.175592, 0.173538, |
551 | 0.171484, 0.169431, 0.167380, 0.165330, 0.163282, |
552 | 0.161236, 0.159194, 0.157155, 0.155120, 0.153089, |
553 | 0.151063, 0.149042, 0.147027, 0.145018, 0.143016, |
554 | 0.141020, 0.139032, 0.137052, 0.135080, 0.133116, |
555 | 0.131162, 0.129217, 0.127281, 0.125356, 0.123442, |
556 | 0.121538, 0.119645, 0.117765, 0.115896, 0.114039, |
557 | 0.112195, 0.110364, 0.108547, 0.106743, 0.104953, |
558 | 0.103177, 0.101415, 0.099669, 0.097937, 0.096221, |
559 | 0.094521, 0.092836, 0.091168, 0.089515, 0.087880, |
560 | 0.086261, 0.084659, 0.083074, 0.081506, 0.079956, |
561 | 0.078424, 0.076910, 0.075413, 0.073935, 0.072475, |
562 | 0.071034, 0.069611, 0.068206, 0.066821, 0.065454, |
563 | 0.064106, 0.062776, 0.061466, 0.060175, 0.058903, |
564 | 0.057650, 0.056416, 0.055201, 0.054005, 0.052829, |
565 | 0.051671, 0.050532, 0.049413, 0.048312, 0.047230, |
566 | 0.046166, 0.045122, 0.044096, 0.043088, 0.042099, |
567 | 0.041128, 0.040175, 0.039241, 0.038324, 0.037424, |
568 | 0.036542, 0.035678, 0.034831, 0.034000, 0.033187, |
569 | 0.032389, 0.031609, 0.030844, 0.030096, 0.029363, |
570 | 0.028645, 0.027943, 0.027255, 0.026583, 0.025924, |
571 | 0.025280, 0.024650, 0.024033, 0.023430, 0.022840, |
572 | 0.022262, 0.021697, 0.021144, 0.020603, 0.020073, |
573 | 0.019555, 0.019048, 0.018551, 0.018065, 0.017588, |
574 | 0.017122, 0.016665, 0.016217, 0.015777, 0.015346, |
575 | 0.014924, 0.014509, 0.014102, 0.013702, 0.013310, |
576 | 0.012924, 0.012544, 0.012171, 0.011803, 0.011442, |
577 | 0.011085, 0.010734, 0.010388, 0.010047, 0.009710, |
578 | 0.009377, 0.009048, 0.008724, 0.008403, 0.008085, |
579 | 0.007772, 0.007461, 0.007154, 0.006850, 0.006548, |
580 | 0.006250, 0.005955, 0.005663, 0.005374, 0.005087, |
581 | 0.004804, 0.004523, 0.004246, 0.003972, 0.003701, |
582 | 0.003434, 0.003171, 0.002911, 0.002656, 0.002405, |
583 | 0.002159, 0.001918, 0.001682, 0.001453, 0.001229, |
584 | 0.001013, 0.000803, 0.000602, 0.000409, 0.000225, |
585 | 0.000051, 0.000000, 0.000000, 0.000000, 0.000000, |
586 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
587 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
588 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
589 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
590 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
591 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
592 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
593 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
594 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
595 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
596 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
597 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
598 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
599 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
600 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
601 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
602 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
603 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
604 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
605 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
606 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
607 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
608 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
609 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
610 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
611 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
612 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
613 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
614 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
615 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
616 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
617 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
618 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
619 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
620 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
621 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
622 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
623 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
624 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
625 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
626 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
627 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
628 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
629 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
630 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
631 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
632 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
633 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
634 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
635 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
636 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
637 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
638 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
639 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
640 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
641 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
642 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
643 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
644 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
645 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
646 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
647 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
648 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
649 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
650 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
651 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, |
652 | 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 |
653 | }; |
654 | double fLambda[1000]; |
655 | for (Int_t i=0; i < 1000; i++) { |
656 | fLambda[i] = i; |
657 | } |
658 | fDetEff = new TGraph(1000, fLambda, fEfficiency); |
659 | } |