Bug Summary

File:scratch/gluex/scan-build-work/hdgeant4/src/GlueXSensitiveDetectorDIRC.cc
Location:line 61, column 25
Description:Value stored to 'jcalib' during its initialization is never read

Annotated Source Code

1//
2// GlueXSensitiveDetectorDIRC - class implementation
3//
4// author: richard.t.jones at uconn.edu
5// version: november 28, 2016
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// Geant3-style particle index for optical photon
28#define OPTICAL_PHOTON50 50
29
30// Cutoff on the total number of allowed hits
31int GlueXSensitiveDetectorDIRC::MAX_HITS = 1000;
32int GlueXSensitiveDetectorDIRC::MAX_PIXELS = 6912;
33
34// Minimum hit time difference for two hits on the same tube
35double GlueXSensitiveDetectorDIRC::TWO_HIT_TIME_RESOL = 50*ns;
36
37int GlueXSensitiveDetectorDIRC::instanceCount = 0;
38G4Mutex GlueXSensitiveDetectorDIRC::fMutex = G4MUTEX_INITIALIZER{ { 0, 0, 0, 0, 0, 0, 0, { 0, 0 } } };
39
40TGraph *GlueXSensitiveDetectorDIRC::fDetEff = 0;
41
42GlueXSensitiveDetectorDIRC::GlueXSensitiveDetectorDIRC(const G4String& name)
43 : G4VSensitiveDetector(name)
44{
45 // The rest of this only needs to happen once, the first time an object
46 // of this type is instantiated for this configuration of geometry and
47 // fields. If the geometry or fields change in such a way as to modify
48 // the drift-time properties of hits in the DIRC, you must delete all old
49 // objects of this class and create new ones.
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) { // dummy
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
86GlueXSensitiveDetectorDIRC::GlueXSensitiveDetectorDIRC(const GlueXSensitiveDetectorDIRC &src)
87 : G4VSensitiveDetector(src)
88{
89 G4AutoLock barrier(&fMutex);
90 ++instanceCount;
91}
92
93GlueXSensitiveDetectorDIRC &GlueXSensitiveDetectorDIRC::operator=(const
94 GlueXSensitiveDetectorDIRC &src)
95{
96 G4AutoLock barrier(&fMutex);
97 *(G4VSensitiveDetector*)this = src;
98 return *this;
99}
100
101GlueXSensitiveDetectorDIRC::~GlueXSensitiveDetectorDIRC()
102{
103 G4AutoLock barrier(&fMutex);
104 --instanceCount;
105}
106
107void GlueXSensitiveDetectorDIRC::Initialize(G4HCofThisEvent* hce)
108{
109}
110
111G4bool 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 // For particles that range out inside the active volume, the
131 // "out" time may sometimes be set to something enormously high.
132 // This screws up the hit. Check for this case here by looking
133 // at tout and making sure it is less than 1 second. If it's
134 // not, then just use tin for "t".
135
136 if (tout > 1.0*s) t = tin;
137
138 // Post the hit to the points list in the
139 // order of appearance in the event simulation.
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 // radiator volume: BNNM (NN = bar number 0-47 and M is sub-bar character A-D)
148 int ibar = 10*((int)volname(1,1)(0)-48)+(int)volname(2,1)(0)-48; // this is nasty, but it works
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; // from HDDS geometry
166 barhit.track = itrack; // track id of the charged particle
167 fHitsBar.push_back(barhit);
168 }
169 return true;
170 }
171
172 // wedge and mirrors volumes
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 // store normal to the closest boundary
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;// localNormal.x() + 10*localNormal.y() + 100*localNormal.z();
226 wobhit.normalId = normalId;
227 fHitsWob.push_back(wobhit);
228 }
229 }
230 return true;
231 }
232
233 // PMT's pixel volume
234 if (volname == "PIXV") {
235 if ((int)fHitsPmt.size() < MAX_HITS) {
236
237 // fix propagation speed for op
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; // 2 * (4*122.5) // 2 * bar length + wedge + window
245 double l_EPOTEK = 0.005 + 8 * 0.005; // window+wedge glue + 6 * bar joing glue
246 double l_AIR = 2 * 0.01; // air gap to mirror
247 double l_H2O = tracklen - l_QZBL - l_EPOTEK - l_AIR;
248
249 // hard coded propagation time for 3.5 eV OpticalPhoton
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; // [0,1]
267 double pix = touch_hist->GetReplicaNumber(0)-1; // [0,6911]
268
269 pmthit.ch = box*MAX_PIXELS + pix;
270
271 pmthit.key_bar = -999;
272 for (unsigned int i=0;i<fHitsBar.size();i++){ // get bar hit from parent track
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 //G4ThreeVector vmom = track->GetVertexMomentumDirection();
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
327void 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 // pack hits into ouptut hddm record
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 // Collect and output the BarHits
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 // Collect and output the DircTruthPmtHit
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
412int 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
437double 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
445void GlueXSensitiveDetectorDIRC::InitializeDetEff()
446{
447 G4AutoLock barrier(&fMutex);
448 if (fDetEff != 0)
449 return;
450
451 // quantum efficiency for H12700
452 // defined for wavelength in the range [0, 1000] nm
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}