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
236 // fix propagation speed for op
237 double tracklen=track->GetTrackLength()/cm;
238 double en=Ein/GeV;
239 double refindex= 1.43603+0.0132404*en-0.00225287*en*en+0.000500109*en*en*en;
240 double time_fixed=tracklen/(29.9792458/refindex);
241
242#ifdef DIRC_CHECK_PROPAGATION_TIME
243 double l_QZBL = 9.1 + 0.96 + 122.5; // 2 * (4*122.5) // 2 * bar length + wedge + window
244 double l_EPOTEK = 0.005 + 8 * 0.005; // window+wedge glue + 6 * bar joing glue
245 double l_AIR = 2 * 0.01; // air gap to mirror
246 double l_H2O = tracklen - l_QZBL - l_EPOTEK - l_AIR;
247
248 // hard coded propagation time for 3.5 eV OpticalPhoton
249 double angle = 45/180*3.14159;
250 double time_propagated = l_QZBL/(29.9792458/1.476)/cos(angle);
251 time_propagated += l_EPOTEK/(29.9792458/1.616)/cos(angle);
252 time_propagated += l_AIR/(29.9792458)/cos(angle);
253 time_propagated += l_H2O/(29.9792458/1.343);
254 G4cout(*G4cout_p)<<"Propagated time = "<<time_propagated<<" and measured time = "<<t/ns<<G4endlstd::endl;
255#endif
256
257 GlueXHitDIRCPmt pmthit;
258 pmthit.E_GeV = Ein/GeV;
259 pmthit.t_ns = t/ns;
260 pmthit.t_fixed_ns = time_fixed;
261 pmthit.x_cm = x[0]/cm;
262 pmthit.y_cm = x[1]/cm;
263 pmthit.z_cm = x[2]/cm;
264
265 double box = touch_hist->GetReplicaNumber(1)-1; // [0,1]
266 double pix = touch_hist->GetReplicaNumber(0)-1; // [0,6911]
267
268 pmthit.ch = box*MAX_PIXELS + pix;
269
270 pmthit.key_bar = -999;
271 for (unsigned int i=0;i<fHitsBar.size();i++){ // get bar hit from parent track
272 if (fHitsBar[i].track == track->GetParentID()) {
273 pmthit.key_bar = fHitsBar[i].bar;
274 }
275 }
276 pmthit.track = track->GetParentID();
277
278 int64_t pathId1 = 0;
279 int64_t pathId2 = 0;
280 int mid, refl=0;
281 pmthit.bbrefl = false;
282 for (unsigned int i=0;i<fHitsWob.size();i++) {
283 if (fHitsWob[i].track == track->GetTrackID()) {
284 mid =fHitsWob[i].normalId;
285 if (mid>=100) {
286 pmthit.bbrefl = true;
287 continue;
288 }
289 refl++;
290 if (refl <= 18) {
291 if (mid<10)
292 pathId1 = pathId1*10 + mid;
293 else
294 pathId1 = pathId1*100 + mid;
295 }
296 else if (refl > 18 && refl < 26) {
297 if (mid<10)
298 pathId2 = pathId2*10 + mid;
299 else
300 pathId2 = pathId2*100 + mid;
301 }
302 }
303 }
304 int64_t pathId=pathId1+pathId2;
305 if (refl>19)
306 pathId *=-1;
307
308 pmthit.path = pathId;
309 pmthit.refl = refl;
310
311 if (fLutId<48) {
312 //G4ThreeVector vmom = track->GetVertexMomentumDirection();
313 pmthit.key_bar = fLutId;
314 }
315 fHitsPmt.push_back(pmthit);
316 }
317 return true;
318}
319
320void GlueXSensitiveDetectorDIRC::EndOfEvent(G4HCofThisEvent*)
321{
322 if ((fHitsBar.size() == 0 && !(fLutId<48) && !fLED) || (fHitsBar.size() == 0 && !fLED) || fHitsPmt.size() == 0 || (fHitsWob.size() == 0 && !fLED))
323 {
324
325 fHitsBar.clear();
326 fHitsPmt.clear();
327 fHitsWob.clear();
328 return;
329 }
330
331 if (verboseLevel > 1) {
332 G4cout(*G4cout_p) << G4endlstd::endl
333 << "--------> Hits Collection: in this event there are "
334 << fHitsBar.size() << " bar hits:"
335 << G4endlstd::endl;
336 for(unsigned int h=0; h<fHitsBar.size(); h++)
337 fHitsBar[h].Print();
338
339 G4cout(*G4cout_p) << G4endlstd::endl
340 << "--------> Hits Collection: in this event there are "
341 << fHitsPmt.size() << " PMT hits: "
342 << G4endlstd::endl;
343 for(unsigned int h=0; h<fHitsPmt.size(); h++)
344 fHitsPmt[h].Print();
345 }
346
347 // pack hits into ouptut hddm record
348
349 G4EventManager* mgr = G4EventManager::GetEventManager();
350 G4VUserEventInformation* info = mgr->GetUserInformation();
351 hddm_s::HDDM *record = ((GlueXUserEventInformation*)info)->getOutputRecord();
352 if (record == 0) {
353 G4cerr(*G4cerr_p) << "GlueXSensitiveDetectorDIRC::EndOfEvent error - "
354 << "hits seen but no output hddm record to save them into, "
355 << "cannot continue!" << G4endlstd::endl;
356 exit(1);
357 }
358
359 if (record->getPhysicsEvents().size() == 0) record->addPhysicsEvents();
360 if (record->getHitViews().size() == 0) record->getPhysicsEvent().addHitViews();
361 hddm_s::HitView &hitview = record->getPhysicsEvent().getHitView();
362 if (hitview.getDIRCs().size() == 0) hitview.addDIRCs();
363 hddm_s::DIRC &dirc = hitview.getDIRC();
364
365 // Collect and output the BarHits
366 for(unsigned int h=0; h<fHitsBar.size(); h++){
367 hddm_s::DircTruthBarHitList bhit = dirc.addDircTruthBarHits(1);
368 bhit(0).setE(fHitsBar[h].E_GeV);
369 bhit(0).setT(fHitsBar[h].t_ns);
370 bhit(0).setX(fHitsBar[h].x_cm);
371 bhit(0).setY(fHitsBar[h].y_cm);
372 bhit(0).setZ(fHitsBar[h].z_cm);
373 bhit(0).setPx(fHitsBar[h].px_GeV);
374 bhit(0).setPy(fHitsBar[h].py_GeV);
375 bhit(0).setPz(fHitsBar[h].pz_GeV);
376 bhit(0).setPdg(fHitsBar[h].pdg);
377 bhit(0).setBar(fHitsBar[h].bar);
378 bhit(0).setTrack(fHitsBar[h].track);
379 }
380
381 // Collect and output the DircTruthPmtHit
382 int hitscount = fHitsPmt.size();
383 if (hitscount > MAX_HITS) {
384 hitscount = MAX_HITS;
385 G4cerr(*G4cerr_p) << "GlueXSensitiveDetectorDIRC::EndOfEvent warning: "
386 << "max hit count " << MAX_HITS << " exceeded, "
387 << fHitsPmt.size() - hitscount << " hits discarded."
388 << G4endlstd::endl;
389 }
390 for(int h=0; h<hitscount; h++){
391 hddm_s::DircTruthPmtHitList mhit = dirc.addDircTruthPmtHits(1);
392 mhit(0).setE(fHitsPmt[h].E_GeV);
393 mhit(0).setT(fHitsPmt[h].t_ns);
394 mhit(0).setX(fHitsPmt[h].x_cm);
395 mhit(0).setY(fHitsPmt[h].y_cm);
396 mhit(0).setZ(fHitsPmt[h].z_cm);
397 mhit(0).setCh(fHitsPmt[h].ch);
398 mhit(0).setKey_bar(fHitsPmt[h].key_bar);
399#if DIRCTRUTHEXTRA1
400 hddm_s::DircTruthPmtHitExtraList mhitextra = mhit(0).addDircTruthPmtHitExtras(1);
401 mhitextra(0).setT_fixed(fHitsPmt[h].t_fixed_ns);
402 mhitextra(0).setPath(fHitsPmt[h].path);
403 mhitextra(0).setRefl(fHitsPmt[h].refl);
404 mhitextra(0).setBbrefl(fHitsPmt[h].bbrefl);
405#endif
406 }
407
408 fHitsBar.clear();
409 fHitsPmt.clear();
410 fHitsWob.clear();
411}
412
413int GlueXSensitiveDetectorDIRC::GetIdent(std::string div,
414 const G4VTouchable *touch)
415{
416 const HddsG4Builder* bldr = GlueXDetectorConstruction::GetBuilder();
417 std::map<std::string, std::vector<int> >::const_iterator iter;
418 std::map<std::string, std::vector<int> > *identifiers;
419 int max_depth = touch->GetHistoryDepth();
420 for (int depth = 0; depth < max_depth; ++depth) {
421 G4VPhysicalVolume *pvol = touch->GetVolume(depth);
422 G4LogicalVolume *lvol = pvol->GetLogicalVolume();
423 int volId = fVolumeTable[lvol];
424 if (volId == 0) {
425 volId = bldr->getVolumeId(lvol);
426 fVolumeTable[lvol] = volId;
427 }
428 identifiers = &Refsys::fIdentifierTable[volId];
429 if ((iter = identifiers->find(div)) != identifiers->end()) {
430 int copyNum = touch->GetCopyNumber(depth);
431 copyNum += (dynamic_cast<G4PVPlacement*>(pvol))? -1 : 0;
432 return iter->second[copyNum];
433 }
434 }
435 return -1;
436}
437
438double GlueXSensitiveDetectorDIRC::GetDetectionEfficiency(double energy)
439{
440 if (fDetEff == 0)
441 InitializeDetEff();
442 double wavelength = CLHEP::hbarc * CLHEP::twopi / energy;
443 return fDetEff->Eval(wavelength / nm);
444}
445
446void GlueXSensitiveDetectorDIRC::InitializeDetEff()
447{
448 G4AutoLock barrier(&fMutex);
449 if (fDetEff != 0)
450 return;
451
452 // quantum efficiency for H12700
453 // defined for wavelength in the range [0, 1000] nm
454 double fEfficiency[1000] = {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.000000, 0.000000, 0.000000, 0.000000, 0.000000,
500 0.196823, 0.202016, 0.206993, 0.211762, 0.216329,
501 0.220700, 0.224884, 0.228885, 0.232711, 0.236366,
502 0.239858, 0.243192, 0.246373, 0.249408, 0.252301,
503 0.255058, 0.257683, 0.260182, 0.262560, 0.264822,
504 0.266971, 0.269013, 0.270951, 0.272791, 0.274535,
505 0.276189, 0.277756, 0.279239, 0.280643, 0.281971,
506 0.283227, 0.284413, 0.285534, 0.286592, 0.287590,
507 0.288531, 0.289419, 0.290255, 0.291043, 0.291785,
508 0.292484, 0.293142, 0.293762, 0.294345, 0.294894,
509 0.295412, 0.295899, 0.296358, 0.296791, 0.297200,
510 0.297585, 0.297950, 0.298296, 0.298624, 0.298935,
511 0.299231, 0.299514, 0.299784, 0.300043, 0.300291,
512 0.300531, 0.300763, 0.300988, 0.301206, 0.301420,
513 0.301629, 0.301835, 0.302038, 0.302238, 0.302437,
514 0.302636, 0.302833, 0.303031, 0.303230, 0.303429,
515 0.303630, 0.303832, 0.304037, 0.304244, 0.304453,
516 0.304666, 0.304881, 0.305099, 0.305321, 0.305545,
517 0.305774, 0.306005, 0.306240, 0.306478, 0.306720,
518 0.306964, 0.307212, 0.307463, 0.307717, 0.307973,
519 0.308232, 0.308493, 0.308756, 0.309022, 0.309288,
520 0.309557, 0.309826, 0.310096, 0.310367, 0.310637,
521 0.310908, 0.311178, 0.311447, 0.311715, 0.311981,
522 0.312245, 0.312507, 0.312766, 0.313022, 0.313274,
523 0.313522, 0.313766, 0.314005, 0.314238, 0.314466,
524 0.314688, 0.314903, 0.315111, 0.315311, 0.315504,
525 0.315688, 0.315863, 0.316029, 0.316185, 0.316331,
526 0.316466, 0.316590, 0.316703, 0.316804, 0.316893,
527 0.316968, 0.317031, 0.317080, 0.317114, 0.317135,
528 0.317140, 0.317130, 0.317105, 0.317063, 0.317005,
529 0.316931, 0.316839, 0.316729, 0.316602, 0.316457,
530 0.316292, 0.316109, 0.315907, 0.315686, 0.315444,
531 0.315182, 0.314900, 0.314598, 0.314274, 0.313929,
532 0.313563, 0.313175, 0.312765, 0.312333, 0.311878,
533 0.311402, 0.310902, 0.310379, 0.309834, 0.309265,
534 0.308673, 0.308057, 0.307418, 0.306755, 0.306068,
535 0.305357, 0.304622, 0.303863, 0.303080, 0.302273,
536 0.301442, 0.300586, 0.299706, 0.298802, 0.297874,
537 0.296921, 0.295944, 0.294943, 0.293918, 0.292869,
538 0.291796, 0.290699, 0.289579, 0.288434, 0.287266,
539 0.286075, 0.284860, 0.283623, 0.282362, 0.281078,
540 0.279772, 0.278443, 0.277093, 0.275720, 0.274325,
541 0.272908, 0.271470, 0.270012, 0.268532, 0.267031,
542 0.265510, 0.263970, 0.262409, 0.260829, 0.259229,
543 0.257611, 0.255974, 0.254319, 0.252646, 0.250956,
544 0.249248, 0.247524, 0.245782, 0.244025, 0.242252,
545 0.240464, 0.238661, 0.236843, 0.235011, 0.233165,
546 0.231306, 0.229433, 0.227549, 0.225652, 0.223743,
547 0.221823, 0.219892, 0.217951, 0.216000, 0.214040,
548 0.212070, 0.210092, 0.208105, 0.206111, 0.204110,
549 0.202102, 0.200087, 0.198067, 0.196041, 0.194011,
550 0.191976, 0.189937, 0.187894, 0.185849, 0.183801,
551 0.181750, 0.179699, 0.177646, 0.175592, 0.173538,
552 0.171484, 0.169431, 0.167380, 0.165330, 0.163282,
553 0.161236, 0.159194, 0.157155, 0.155120, 0.153089,
554 0.151063, 0.149042, 0.147027, 0.145018, 0.143016,
555 0.141020, 0.139032, 0.137052, 0.135080, 0.133116,
556 0.131162, 0.129217, 0.127281, 0.125356, 0.123442,
557 0.121538, 0.119645, 0.117765, 0.115896, 0.114039,
558 0.112195, 0.110364, 0.108547, 0.106743, 0.104953,
559 0.103177, 0.101415, 0.099669, 0.097937, 0.096221,
560 0.094521, 0.092836, 0.091168, 0.089515, 0.087880,
561 0.086261, 0.084659, 0.083074, 0.081506, 0.079956,
562 0.078424, 0.076910, 0.075413, 0.073935, 0.072475,
563 0.071034, 0.069611, 0.068206, 0.066821, 0.065454,
564 0.064106, 0.062776, 0.061466, 0.060175, 0.058903,
565 0.057650, 0.056416, 0.055201, 0.054005, 0.052829,
566 0.051671, 0.050532, 0.049413, 0.048312, 0.047230,
567 0.046166, 0.045122, 0.044096, 0.043088, 0.042099,
568 0.041128, 0.040175, 0.039241, 0.038324, 0.037424,
569 0.036542, 0.035678, 0.034831, 0.034000, 0.033187,
570 0.032389, 0.031609, 0.030844, 0.030096, 0.029363,
571 0.028645, 0.027943, 0.027255, 0.026583, 0.025924,
572 0.025280, 0.024650, 0.024033, 0.023430, 0.022840,
573 0.022262, 0.021697, 0.021144, 0.020603, 0.020073,
574 0.019555, 0.019048, 0.018551, 0.018065, 0.017588,
575 0.017122, 0.016665, 0.016217, 0.015777, 0.015346,
576 0.014924, 0.014509, 0.014102, 0.013702, 0.013310,
577 0.012924, 0.012544, 0.012171, 0.011803, 0.011442,
578 0.011085, 0.010734, 0.010388, 0.010047, 0.009710,
579 0.009377, 0.009048, 0.008724, 0.008403, 0.008085,
580 0.007772, 0.007461, 0.007154, 0.006850, 0.006548,
581 0.006250, 0.005955, 0.005663, 0.005374, 0.005087,
582 0.004804, 0.004523, 0.004246, 0.003972, 0.003701,
583 0.003434, 0.003171, 0.002911, 0.002656, 0.002405,
584 0.002159, 0.001918, 0.001682, 0.001453, 0.001229,
585 0.001013, 0.000803, 0.000602, 0.000409, 0.000225,
586 0.000051, 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 0.000000, 0.000000, 0.000000, 0.000000, 0.000000
654 };
655 double fLambda[1000];
656 for (Int_t i=0; i < 1000; i++) {
657 fLambda[i] = i;
658 }
659 fDetEff = new TGraph(1000, fLambda, fEfficiency);
660}