001
002
003
004
005
006
007 #include <iostream>
008
009 #include "xftsim_only.hh"
010 #include "TObjectTable.h"
011 #include "Helix.hh"
012
013 #include "TLorentzVector.h"
014 using namespace std;
015
016 float konst = 0.00014989*14.116;
017 float halfpi = 0.5*3.14159;
018 float twopi = 2.0*3.14159;
019 float speedLight = 29.98;
020
021 float OFFPT_THRESHOLD = 1.5;
022 float OFFPT_MINIMUM = 1.2;
023
024 int nsn = 12;
025
026 float dwlr = 0.5*0.7112;
027
028 int npix_cell[] = {6,12,6,12,6,6,6,6};
029
030
031 int ncl[] = {42*4, 48*4, 60*4, 72*4, 84*4, 96*4, 108*4, 120*4};
032 float rsns[] = {46.0, 58.534, 70.0, 82.055, 94.0, 105.575, 119.0, 129.096};
033
034
035 float dclw[] = {twopi/ncl[0], twopi/ncl[1], twopi/ncl[2], twopi/ncl[3],
036
037 twopi/ncl[4], twopi/ncl[5], twopi/ncl[6], twopi/ncl[7]};
038 float pixPhi[] = {twopi/(ncl[0]*npix_cell[0]), twopi/(ncl[1]*npix_cell[1]),
039 twopi/(ncl[2]*npix_cell[2]), twopi/(ncl[3]*npix_cell[3]),
040 twopi/(ncl[4]*npix_cell[4]), twopi/(ncl[5]*npix_cell[5]),
041 twopi/(ncl[6]*npix_cell[6]), twopi/(ncl[7]*npix_cell[7])};
042
043
044 float ang = 35.0 * twopi / 360.0;
045 float drift = 0.0088;
046 float phz0 = 0.0;
047
048 float wireEfficiency = 1.00;
049 float promptTime = 44.0;
050 float delayedTime = 88.0;
051 float cutoffTime = 132.0;
052
053 int nfid = 0;
054 int nfid_matched = 0;
055 int index_match = 0;
056 int nlink;
057 int nlink3;
058 int numPix[4][3];
059
060
061 xftsim::~xftsim() {
062 }
063
064 xftsim::xftsim(){
065 debug = false;
066 getTrig = true;
067 cotd_input = true;
068 }
069
070
071
072 void xftsim::Ana()
073 {
074 int prt = 0;
075
076
077 setCOTconstants();
078
079
080 doxhit = true;
081 doxtrk = true;
082 dootrk = true;
083
084
085 checkSimDataHits = false;
086 findDisagreeSimData = false;
087
088 int maxEvPrint = 10;
089
090
091 Int_t nentries = Int_t(mytree->fChain->GetEntries());
092 printf("Total number of entries: %d\n",nentries);
093 printf("Total number of events to loop over: %d\n",topNumEvents);fflush(stdout);
094
095
096 if ((topNumEvents > 0) && (topNumEvents <= nentries)) {
097 nentries = topNumEvents;
098 }
099
100
101
102
103
104
105 TString names[19] = {"JET_20","JET_50","JET_70","JET_100","DIPHOTON",
106 "TWO_JET","NOTRACK","DIFF","MULTI_JET",
107 "MINBIAS","MET45","MET_PEM","MET_L3",
108 "DIJET","PHOTON_10","PHOTON_15",
109 "PHOTON_25_ISO_v7","ULTRA","TRIPHO"};
110
111
112
113
114 printf("Making XFTSys\n");fflush(stdout);
115
116 myXftSim = new XFTSim(mytree);
117 myXftSim->setDataFlag(dataFlag);
118 myXftSim->setShift(shift_flag);
119 myXftSim->setBrdShift(startBrdShiftDB);
120 myXftSim->setMinHits(minHitsReqDB);
121 myXftSim->setCotdInput(cotd_input);
122 printf("Done making XFTSys\n");fflush(stdout);
123 myXftSim->beginJob();
124 myXftSim->beginRun();
125
126 Int_t nbytes = 0, nb = 0;
127
128 int lastRunNumber = -999;
129
130
131
132
133
134
135
136
137 if (DeadWireInputVal == 1) {
138 char pathRuns[200];
139 sprintf(pathRuns,"%s/XFTSim/root/runs.txt",getenv("PROJECT_DIR"));
140 FILE *runs = fopen(pathRuns,"w");
141 for (Int_t jentry=0; jentry<nentries;jentry++) {
142 nEvents++;
143 if (nEvents%100 == 0) {printf("Now at entry %d\n",jentry);fflush(stdout);}
144 LoadData(jentry);
145 nbytes += nb;
146 if (mytree->evt_runNumber[0] != lastRunNumber) {
147 lastRunNumber = mytree->evt_runNumber[0];
148 fprintf(runs,"%d\n",lastRunNumber);
149 }
150 }
151 fclose(runs);
152 exit(1);
153 }
154
155
156 if (DeadWireInputVal > 2) {
157 int runNumberDeadWireList = DeadWireInputVal;
158 myXftSim->setBadWireRun(runNumberDeadWireList);
159 }
160
161
162
163
164
165 for (Int_t jentry=0; jentry<nentries;jentry++) {
166
167 nEvents++;
168 if (nEvents%100 == 0) {printf("Now at Loop entry %d\n",jentry);fflush(stdout);}
169
170
171 LoadData(jentry);
172 nbytes += nb;
173 if (debug) { cout << " Loaded Data " << endl; fflush(stdout); }
174 if (getTrig) {
175 if (mytree->evt_runNumber[0] != lastRunNumber) {
176
177 GetTriggerBitL3Run(19,names);
178 lastRunNumber = mytree->evt_runNumber[0];
179 cout << " New Run number detected " << lastRunNumber << endl;
180 if (DeadWireInputVal == 2) {
181 myXftSim->setBadWireRun(lastRunNumber);
182 }
183 }
184 }
185
186
187
188 myXftSim->event();
189
190 }
191 }
192
193
194
195 void xftsim::BeginJob() {
196
197
198
199
200 maxRunNumbers = 1000;
201 totalRunNumbers = 0;
202 totalRunNumbersL1 = 0;
203 totalRunNumbersL2 = 0;
204 totalRunNumbersL3 = 0;
205
206
207
208
209
210 char filename[200];
211 sprintf(filename,"%s/%s",
212 getenv("PROJECT_DIR"),
213 "/XFTSim/XFTDatabase/Linker4LayerRoads_090099.dat");
214 roadFile(filename);
215
216
217 char filename3[200];
218 sprintf(filename3,"%s/%s",
219 getenv("PROJECT_DIR"),
220 "/XFTSim/XFTDatabase/Linker3LayerRoads_050100.dat");
221 road3File(filename3);
222
223
224
225 char filenameCOT[200];
226 sprintf(filenameCOT,"%s/%s",
227 getenv("PROJECT_DIR"),
228 "/XFTSim/XFTDatabase/xft_cot_geom.dat");
229 cotGeom(filenameCOT);
230
231
232
233
234
235 bSL[0] = 1; bC[0] = 89; bW[0] = 10;
236 bSL[1] = 1; bC[1] = 89; bW[1] = 11;
237 bSL[2] = 1; bC[2] = 90; bW[2] = 2;
238 bSL[3] = 1; bC[3] = 90; bW[3] = 4;
239 bSL[4] = 2; bC[4] = 74; bW[4] = 0;
240 bSL[5] = 3; bC[5] = 165; bW[5] = 2;
241 bSL[6] = 3; bC[6] = 54; bW[6] = 0;
242 bSL[7] = 4; bC[7] = 326; bW[7] = 2;
243
244 bSL[8] = 2; bC[8] = 94; bW[8] = 11;
245 bSL[9] = 3; bC[9] = 300; bW[9] = 9;
246 bSL[10] = 4; bC[10] = 16; bW[10] = 7;
247 bSL[11] = 4; bC[11] = 18; bW[11] = 10;
248 bSL[12] = 4; bC[12] = 152; bW[12] = 9;
249 bSL[13] = 4; bC[13] = 263; bW[13] = 4;
250 bSL[14] = 4; bC[14] = 332; bW[14] = 1;
251 bSL[15] = 4; bC[15] = 373; bW[15] = 0;
252 bSL[16] = 4; bC[16] = 409; bW[16] = 0;
253
254 bSL[17] = 1; bC[17] = 25; bW[17] = 3;
255 bSL[18] = 2; bC[18] = 25; bW[18] = 3;
256 bSL[19] = 3; bC[19] = 25; bW[19] = 3;
257 bSL[20] = 4; bC[20] = 25; bW[20] = 3;
258
259
260
261
262 }
263
264
265 void xftsim::LoadData(int jentry) {
266 Int_t ientry;
267 Int_t nb;
268 ientry = mytree->LoadTree(jentry);
269 sprintf(newDataFileName,"%s",mytree->fChain->GetCurrentFile()->GetName());
270 TString aTry = mytree->fChain->GetCurrentFile()->GetName();
271 TString aDir = mytree->fChain->GetDirectory()->GetName();
272 int compare = aTry.CompareTo(newDataFileName);
273
274 compare = aTry.CompareTo(oldDataFileName);
275 if (compare == 1) {
276
277 myXftSim->switchSimFile(aTry);
278 }
279 sprintf(oldDataFileName,"%s",aTry.Data());
280 nb = mytree->fChain->GetEntry(jentry);
281 }
282
283
284 void xftsim::setInputFile(const char* fname) {
285
286 if (inputFiles == 0) {
287
288 const Text_t* ffname = fname;
289 printf("Setting initial input file: %s\n",ffname);
290 mytree = new topTree(ffname);
291 mytree->fChain->Add(ffname);
292 } else {
293 printf("Adding input file: %s\n",fname);
294 mytree->fChain->Add(fname);
295 }
296 inputFiles++;
297
298 }
299
300 void xftsim::SetOutputHistFile(const char* name) {
301
302
303 histFile = new TFile(name,"RECREATE","test file");
304
305 }
306
307
308
309 void xftsim::EndJob() {
310
311
312
313 histFile->Write();
314 histFile->Close();
315
316 myXftSim->endJob();
317
318 }
319
320
321
322
323
324
325 void xftsim::cotGeom(char* pathName)
326 {
327
328
329 std::ifstream f1(pathName);
330
331
332
333
334 float rtemp1,rtemp2,rtemp3,rtemp4,rtemp5;
335 int itemp1,itemp2,itemp3;
336 for(int sl=0; sl < 8; sl++)
337 {
338 for(int wire=0; wire<12; wire++) {
339 f1 >> itemp1
340 >> itemp2
341 >> itemp3
342 >> rtemp1
343 >> rtemp2
344 >> rtemp3
345 >> wire_r[sl][wire]
346 >> wire_phi[sl][wire]
347 >> rtemp4
348 >> rtemp5;
349 printf("sl %i wire %i radius %f phi %f\n",sl,wire,
350 wire_r[sl][wire],
351 wire_phi[sl][wire]);
352
353
354
355 }
356 }
357 f1.close();
358 }
359
360
361
362
363
364
365 void xftsim::setCOTconstants() {
366
367
368
369
370
371
372
373
374
375
376
377
378
379 wire_x[0][0]=43.244937;
380 wire_y[0][0]=-2.279069;
381 wire_r[0][0]=43.323341;
382 wire_phi[0][0]=-0.052653;
383
384 wire_x[0][1]=43.827440;
385 wire_y[0][1]=-1.871029;
386 wire_r[0][1]=43.882784;
387 wire_phi[0][1]=-0.042665;
388
389 wire_x[0][2]=44.409942;
390 wire_y[0][2]=-1.462989;
391 wire_r[0][2]=44.446422;
392 wire_phi[0][2]=-0.032931;
393
394 wire_x[0][3]=44.992444;
395 wire_y[0][3]=-1.054950;
396 wire_r[0][3]=45.014099;
397 wire_phi[0][3]=-0.023443;
398
399 wire_x[0][4]=45.574947;
400 wire_y[0][4]=-0.646910;
401 wire_r[0][4]=45.585663;
402 wire_phi[0][4]=-0.014193;
403
404 wire_x[0][5]=46.157449;
405 wire_y[0][5]=-0.238870;
406 wire_r[0][5]=46.160970;
407 wire_phi[0][5]=-0.005175;
408
409 wire_x[0][6]=46.739951;
410 wire_y[0][6]=0.169170;
411 wire_r[0][6]=46.739883;
412 wire_phi[0][6]=0.003619;
413
414 wire_x[0][7]=47.322453;
415 wire_y[0][7]=0.577210;
416 wire_r[0][7]=47.322267;
417 wire_phi[0][7]=0.012197;
418
419 wire_x[0][8]=47.904956;
420 wire_y[0][8]=0.985250;
421 wire_r[0][8]=47.907998;
422 wire_phi[0][8]=0.020564;
423
424 wire_x[0][9]=48.487458;
425 wire_y[0][9]=1.393289;
426 wire_r[0][9]=48.496954;
427 wire_phi[0][9]=0.028727;
428
429 wire_x[0][10]=49.069960;
430 wire_y[0][10]=1.801329;
431 wire_r[0][10]=49.089018;
432 wire_phi[0][10]=0.036693;
433
434 wire_x[0][11]=49.652463;
435 wire_y[0][11]=2.209369;
436 wire_r[0][11]=49.684080;
437 wire_phi[0][11]=0.044467;
438
439
440 wire_x[1][0]=55.305084;
441 wire_y[1][0]=-2.278042;
442 wire_r[1][0]=55.350295;
443 wire_phi[1][0]=-0.041167;
444
445 wire_x[1][1]=55.887596;
446 wire_y[1][1]=-1.870016;
447 wire_r[1][1]=55.917525;
448 wire_phi[1][1]=-0.033448;
449
450 wire_x[1][2]=56.470108;
451 wire_y[1][2]=-1.461991;
452 wire_r[1][2]=56.488013;
453 wire_phi[1][2]=-0.025884;
454
455 wire_x[1][3]=57.052620;
456 wire_y[1][3]=-1.053965;
457 wire_r[1][3]=57.061662;
458 wire_phi[1][3]=-0.018471;
459
460 wire_x[1][4]=57.635132;
461 wire_y[1][4]=-0.645939;
462 wire_r[1][4]=57.638377;
463 wire_phi[1][4]=-0.011207;
464
465 wire_x[1][5]=58.217644;
466 wire_y[1][5]=-0.237913;
467 wire_r[1][5]=58.218067;
468 wire_phi[1][5]=-0.004087;
469
470 wire_x[1][6]=58.800156;
471 wire_y[1][6]=0.170113;
472 wire_r[1][6]=58.800644;
473 wire_phi[1][6]=0.002893;
474
475 wire_x[1][7]=59.382668;
476 wire_y[1][7]=0.578139;
477 wire_r[1][7]=59.386024;
478 wire_phi[1][7]=0.009736;
479
480 wire_x[1][8]=59.965180;
481 wire_y[1][8]=0.986165;
482 wire_r[1][8]=59.974124;
483 wire_phi[1][8]=0.016444;
484
485 wire_x[1][9]=60.547692;
486 wire_y[1][9]=1.394191;
487 wire_r[1][9]=60.564864;
488 wire_phi[1][9]=0.023022;
489
490 wire_x[1][10]=61.130204;
491 wire_y[1][10]=1.802216;
492 wire_r[1][10]=61.158169;
493 wire_phi[1][10]=0.029473;
494
495 wire_x[1][11]=61.712716;
496 wire_y[1][11]=2.210242;
497 wire_r[1][11]=61.753965;
498 wire_phi[1][11]=0.035800;
499
500
501 wire_x[2][0]=66.860904;
502 wire_y[2][0]=-2.274414;
503 wire_r[2][0]=66.906728;
504 wire_phi[2][0]=-0.034004;
505
506 wire_x[2][1]=67.443394;
507 wire_y[2][1]=-1.866357;
508 wire_r[2][1]=67.474938;
509 wire_phi[2][1]=-0.027666;
510
511 wire_x[2][2]=68.025884;
512 wire_y[2][2]=-1.458300;
513 wire_r[2][2]=68.045790;
514 wire_phi[2][2]=-0.021434;
515
516 wire_x[2][3]=68.608374;
517 wire_y[2][3]=-1.050243;
518 wire_r[2][3]=68.619219;
519 wire_phi[2][3]=-0.015307;
520
521 wire_x[2][4]=69.190865;
522 wire_y[2][4]=-0.642186;
523 wire_r[2][4]=69.195161;
524 wire_phi[2][4]=-0.009281;
525
526 wire_x[2][5]=69.773355;
527 wire_y[2][5]=-0.234129;
528 wire_r[2][5]=69.773553;
529 wire_phi[2][5]=-0.003356;
530
531 wire_x[2][6]=70.355845;
532 wire_y[2][6]=0.173929;
533 wire_r[2][6]=70.354336;
534 wire_phi[2][6]=0.002472;
535
536 wire_x[2][7]=70.938335;
537 wire_y[2][7]=0.581986;
538 wire_r[2][7]=70.937450;
539 wire_phi[2][7]=0.008204;
540
541 wire_x[2][8]=71.520826;
542 wire_y[2][8]=0.990043;
543 wire_r[2][8]=71.522838;
544 wire_phi[2][8]=0.013842;
545
546 wire_x[2][9]=72.103316;
547 wire_y[2][9]=1.398100;
548 wire_r[2][9]=72.110446;
549 wire_phi[2][9]=0.019388;
550
551 wire_x[2][10]=72.685806;
552 wire_y[2][10]=1.806157;
553 wire_r[2][10]=72.700218;
554 wire_phi[2][10]=0.024844;
555
556 wire_x[2][11]=73.268296;
557 wire_y[2][11]=2.214214;
558 wire_r[2][11]=73.292104;
559 wire_phi[2][11]=0.030211;
560
561
562 wire_x[3][0]=78.852748;
563 wire_y[3][0]=-2.271370;
564 wire_r[3][0]=78.881818;
565 wire_phi[3][0]=-0.028797;
566
567 wire_x[3][1]=79.435212;
568 wire_y[3][1]=-1.863276;
569 wire_r[3][1]=79.453694;
570 wire_phi[3][1]=-0.023452;
571
572 wire_x[3][2]=80.017676;
573 wire_y[3][2]=-1.455181;
574 wire_r[3][2]=80.027804;
575 wire_phi[3][2]=-0.018184;
576
577 wire_x[3][3]=80.600140;
578 wire_y[3][3]=-1.047087;
579 wire_r[3][3]=80.604099;
580 wire_phi[3][3]=-0.012990;
581
582 wire_x[3][4]=81.182604;
583 wire_y[3][4]=-0.638992;
584 wire_r[3][4]=81.182535;
585 wire_phi[3][4]=-0.007871;
586
587 wire_x[3][5]=81.765068;
588 wire_y[3][5]=-0.230897;
589 wire_r[3][5]=81.763064;
590 wire_phi[3][5]=-0.002824;
591
592 wire_x[3][6]=82.347532;
593 wire_y[3][6]=0.177197;
594 wire_r[3][6]=82.345643;
595 wire_phi[3][6]=0.002152;
596
597 wire_x[3][7]=82.929996;
598 wire_y[3][7]=0.585292;
599 wire_r[3][7]=82.930229;
600 wire_phi[3][7]=0.007058;
601
602 wire_x[3][8]=83.512460;
603 wire_y[3][8]=0.993387;
604 wire_r[3][8]=83.516779;
605 wire_phi[3][8]=0.011895;
606
607 wire_x[3][9]=84.094924;
608 wire_y[3][9]=1.401481;
609 wire_r[3][9]=84.105253;
610 wire_phi[3][9]=0.016664;
611
612 wire_x[3][10]=84.677388;
613 wire_y[3][10]=1.809576;
614 wire_r[3][10]=84.695610;
615 wire_phi[3][10]=0.021367;
616
617 wire_x[3][11]=85.259852;
618 wire_y[3][11]=2.217670;
619 wire_r[3][11]=85.287811;
620 wire_phi[3][11]=0.026005;
621
622
623 wire_x[4][0]=90.475547;
624 wire_y[4][0]=-2.270411;
625 wire_r[4][0]=90.505768;
626 wire_phi[4][0]=-0.025089;
627
628 wire_x[4][1]=91.057993;
629 wire_y[4][1]=-1.862291;
630 wire_r[4][1]=91.078149;
631 wire_phi[4][1]=-0.020449;
632
633 wire_x[4][2]=91.640439;
634 wire_y[4][2]=-1.454171;
635 wire_r[4][2]=91.652457;
636 wire_phi[4][2]=-0.015867;
637
638 wire_x[4][3]=92.222885;
639 wire_y[4][3]=-1.046051;
640 wire_r[4][3]=92.228656;
641 wire_phi[4][3]=-0.011342;
642
643 wire_x[4][4]=92.805331;
644 wire_y[4][4]=-0.637930;
645 wire_r[4][4]=92.806710;
646 wire_phi[4][4]=-0.006874;
647
648 wire_x[4][5]=93.387777;
649 wire_y[4][5]=-0.229810;
650 wire_r[4][5]=93.386586;
651 wire_phi[4][5]=-0.002461;
652
653 wire_x[4][6]=93.970223;
654 wire_y[4][6]=0.178310;
655 wire_r[4][6]=93.968249;
656 wire_phi[4][6]=0.001898;
657
658 wire_x[4][7]=94.552669;
659 wire_y[4][7]=0.586430;
660 wire_r[4][7]=94.551667;
661 wire_phi[4][7]=0.006202;
662
663 wire_x[4][8]=95.135115;
664 wire_y[4][8]=0.994551;
665 wire_r[4][8]=95.136806;
666 wire_phi[4][8]=0.010454;
667
668 wire_x[4][9]=95.717561;
669 wire_y[4][9]=1.402671;
670 wire_r[4][9]=95.723636;
671 wire_phi[4][9]=0.014653;
672
673 wire_x[4][10]=96.300007;
674 wire_y[4][10]=1.810791;
675 wire_r[4][10]=96.312126;
676 wire_phi[4][10]=0.018801;
677
678 wire_x[4][11]=96.882453;
679 wire_y[4][11]=2.218911;
680 wire_r[4][11]=96.902246;
681 wire_phi[4][11]=0.022899;
682
683
684 wire_x[5][0]=102.395002;
685 wire_y[5][0]=-2.266282;
686 wire_r[5][0]=102.413883;
687 wire_phi[5][0]=-0.022129;
688
689 wire_x[5][1]=102.977420;
690 wire_y[5][1]=-1.858122;
691 wire_r[5][1]=102.988247;
692 wire_phi[5][1]=-0.018042;
693
694 wire_x[5][2]=103.559838;
695 wire_y[5][2]=-1.449961;
696 wire_r[5][2]=103.564309;
697 wire_phi[5][2]=-0.014000;
698
699 wire_x[5][3]=104.142255;
700 wire_y[5][3]=-1.041801;
701 wire_r[5][3]=104.142041;
702 wire_phi[5][3]=-0.010003;
703
704 wire_x[5][4]=104.724673;
705 wire_y[5][4]=-0.633641;
706 wire_r[5][4]=104.721416;
707 wire_phi[5][4]=-0.006050;
708
709 wire_x[5][5]=105.307091;
710 wire_y[5][5]=-0.225480;
711 wire_r[5][5]=105.302407;
712 wire_phi[5][5]=-0.002141;
713
714 wire_x[5][6]=105.889509;
715 wire_y[5][6]=0.182680;
716 wire_r[5][6]=105.884987;
717 wire_phi[5][6]=0.001725;
718
719 wire_x[5][7]=106.471927;
720 wire_y[5][7]=0.590841;
721 wire_r[5][7]=106.469130;
722 wire_phi[5][7]=0.005549;
723
724 wire_x[5][8]=107.054345;
725 wire_y[5][8]=0.999001;
726 wire_r[5][8]=107.054810;
727 wire_phi[5][8]=0.009331;
728
729 wire_x[5][9]=107.636762;
730 wire_y[5][9]=1.407161;
731 wire_r[5][9]=107.642002;
732 wire_phi[5][9]=0.013072;
733
734 wire_x[5][10]=108.219180;
735 wire_y[5][10]=1.815322;
736 wire_r[5][10]=108.230683;
737 wire_phi[5][10]=0.016773;
738
739 wire_x[5][11]=108.801598;
740 wire_y[5][11]=2.223482;
741 wire_r[5][11]=108.820826;
742 wire_phi[5][11]=0.020433;
743
744
745 wire_x[6][0]=114.052953;
746 wire_y[6][0]=-2.262791;
747 wire_r[6][0]=114.070677;
748 wire_phi[6][0]=-0.019837;
749
750 wire_x[6][1]=114.635326;
751 wire_y[6][1]=-1.854565;
752 wire_r[6][1]=114.645348;
753 wire_phi[6][1]=-0.016177;
754
755 wire_x[6][2]=115.217698;
756 wire_y[6][2]=-1.446340;
757 wire_r[6][2]=115.221535;
758 wire_phi[6][2]=-0.012552;
759
760 wire_x[6][3]=115.800070;
761 wire_y[6][3]=-1.038114;
762 wire_r[6][3]=115.799214;
763 wire_phi[6][3]=-0.008964;
764
765 wire_x[6][4]=116.382442;
766 wire_y[6][4]=-0.629888;
767 wire_r[6][4]=116.378364;
768 wire_phi[6][4]=-0.005412;
769
770 wire_x[6][5]=116.964814;
771 wire_y[6][5]=-0.221663;
772 wire_r[6][5]=116.958962;
773 wire_phi[6][5]=-0.001895;
774
775 wire_x[6][6]=117.547186;
776 wire_y[6][6]=0.186563;
777 wire_r[6][6]=117.540988;
778 wire_phi[6][6]=0.001587;
779
780 wire_x[6][7]=118.129558;
781 wire_y[6][7]=0.594788;
782 wire_r[6][7]=118.124419;
783 wire_phi[6][7]=0.005035;
784
785 wire_x[6][8]=118.711930;
786 wire_y[6][8]=1.003014;
787 wire_r[6][8]=118.709236;
788 wire_phi[6][8]=0.008449;
789
790 wire_x[6][9]=119.294302;
791 wire_y[6][9]=1.411240;
792 wire_r[6][9]=119.295418;
793 wire_phi[6][9]=0.011829;
794
795 wire_x[6][10]=119.876674;
796 wire_y[6][10]=1.819465;
797 wire_r[6][10]=119.882945;
798 wire_phi[6][10]=0.015177;
799
800 wire_x[6][11]=120.459047;
801 wire_y[6][11]=2.227691;
802 wire_r[6][11]=120.471797;
803 wire_phi[6][11]=0.018491;
804
805
806 wire_x[7][0]=125.927363;
807 wire_y[7][0]=-2.257883;
808 wire_r[7][0]=125.939391;
809 wire_phi[7][0]=-0.017928;
810
811 wire_x[7][1]=126.509679;
812 wire_y[7][1]=-1.849577;
813 wire_r[7][1]=126.515304;
814 wire_phi[7][1]=-0.014619;
815
816 wire_x[7][2]=127.091995;
817 wire_y[7][2]=-1.441271;
818 wire_r[7][2]=127.092587;
819 wire_phi[7][2]=-0.011340;
820
821 wire_x[7][3]=127.674311;
822 wire_y[7][3]=-1.032965;
823 wire_r[7][3]=127.671221;
824 wire_phi[7][3]=-0.008090;
825
826 wire_x[7][4]=128.256626;
827 wire_y[7][4]=-0.624659;
828 wire_r[7][4]=128.251188;
829 wire_phi[7][4]=-0.004870;
830
831 wire_x[7][5]=128.838942;
832 wire_y[7][5]=-0.216353;
833 wire_r[7][5]=128.832471;
834 wire_phi[7][5]=-0.001679;
835
836 wire_x[7][6]=129.421258;
837 wire_y[7][6]=0.191953;
838 wire_r[7][6]=129.415051;
839 wire_phi[7][6]=0.001483;
840
841 wire_x[7][7]=130.003574;
842 wire_y[7][7]=0.600259;
843 wire_r[7][7]=129.998911;
844 wire_phi[7][7]=0.004617;
845
846 wire_x[7][8]=130.585889;
847 wire_y[7][8]=1.008565;
848 wire_r[7][8]=130.584035;
849 wire_phi[7][8]=0.007723;
850
851 wire_x[7][9]=131.168205;
852 wire_y[7][9]=1.416871;
853 wire_r[7][9]=131.170404;
854 wire_phi[7][9]=0.010802;
855
856 wire_x[7][10]=131.750521;
857 wire_y[7][10]=1.825177;
858 wire_r[7][10]=131.758002;
859 wire_phi[7][10]=0.013852;
860
861 wire_x[7][11]=132.332837;
862 wire_y[7][11]=2.233483;
863 wire_r[7][11]=132.346814;
864 wire_phi[7][11]=0.016876;
865
866
867 }
868
869
870
871
872
873
874
875 void xftsim::GetTriggerBit(const char* L1Name,
876 const char* L2Name, const char* L3Name) {
877 Int_t nb;
878
879 Int_t nentries = Int_t(mytree->fChain->GetEntries());
880
881
882
883
884
885 bool found = false;
886 int jentry=0;
887 printf("Number of entries %d\n",nentries);
888 printf("Looking for L1: %s %s %s\n",L1Name,L2Name,L3Name);
889 int numFoundL1 = 0;
890 int numFoundL2 = 0;
891 int numFoundL3 = 0;
892 while ((totalRunNumbers<maxRunNumbers) && jentry<nentries) {
893
894 int ientry = mytree->LoadTree(jentry);
895 int test = mytree->fChain->GetEntry(jentry);
896
897 if (mytree->trigName > 0) {
898 printf("jentry %d runnumber %d L1 triggers %d \n",jentry,
899 mytree->trigName_RunNumber[0],
900 mytree->trigName_NumL1Triggers[0]);
901 RunNumber[totalRunNumbers] = mytree->trigName_RunNumber[0];
902 L1Bit[totalRunNumbers] = -1;
903 L2Bit[totalRunNumbers] = -1;
904 numL3Bit[totalRunNumbers] = 0;
905
906
907 for (int j=0; j<64; j++) {
908 printf(" L1 Trigger bit %d name %s\n",
909 mytree->trigName_L1Bit[0][j],
910 mytree->trigName_L1Name[0][j]);
911 TString nameTrigger = TString(mytree->trigName_L1Name[0][j]);
912 if (nameTrigger.Contains(L1Name, TString::kIgnoreCase)) {
913 L1Bit[totalRunNumbers] = mytree->trigName_L1Bit[0][j];
914
915
916 numFoundL1++;
917 }
918 }
919
920
921 for (int j=0; j<mytree->trigName_NumL2Triggers[0]; j++) {
922 printf(" L2 Trigger bit %d name %s\n",
923 mytree->trigName_L2Bit[0][j],
924 mytree->trigName_L2Name[0][j]);
925 TString nameTrigger = TString(mytree->trigName_L2Name[0][j]);
926 if (nameTrigger.Contains(L2Name, TString::kIgnoreCase)) {
927 L2Bit[totalRunNumbers] = mytree->trigName_L2Bit[0][j];
928
929
930 numFoundL2++;
931 }
932
933 }
934
935
936 for (int j=0; j<mytree->trigName_NumL3Triggers[0]; j++) {
937 printf(" L3 Trigger bit %d name %s\n",
938 mytree->trigName_L3Bit[0][j],
939 mytree->trigName_L3Name[0][j]);
940 TString nameTrigger = TString(mytree->trigName_L3Name[0][j]);
941 if (nameTrigger.Contains(L3Name, TString::kIgnoreCase)) {
942 L3Bit[totalRunNumbers][numL3Bit[totalRunNumbers]]
943 = mytree->trigName_L3Bit[0][j];
944 numL3Bit[totalRunNumbers]++;
945
946
947 numFoundL3++;
948 }
949
950 }
951
952 totalRunNumbers++;
953 }
954 jentry++;
955 }
956 printf("Number of Runs %d found L1 %d L2 %d L3 %d \n",totalRunNumbers,
957 numFoundL1,numFoundL2,numFoundL3);
958
959
960
961 }
962
963
964
965
966
967
968 void xftsim::GetTriggerBitL1(const char* L1Name) {
969 Int_t nb;
970
971 Int_t nentries = Int_t(mytree->fChain->GetEntries());
972
973
974 bool found = false;
975 int jentry=0;
976 printf("Number of entries %d\n",nentries);
977 printf("Looking for L1: %s \n",L1Name);
978 int numFoundL1 = 0;
979 while ((totalRunNumbersL1<maxRunNumbers) && jentry<nentries) {
980
981 int ientry = mytree->LoadTree(jentry);
982 int test = mytree->fChain->GetEntry(jentry);
983 if (mytree->trigName > 0) {
984 printf("jentry %d runnumber %d L1 triggers %d \n",jentry,
985 mytree->trigName_RunNumber[0],
986 mytree->trigName_NumL1Triggers[0]);
987 RunNumberL1[totalRunNumbersL1] = mytree->trigName_RunNumber[0];
988 L1Bit[totalRunNumbersL1] = -1;
989
990
991 for (int j=0; j<64; j++) {
992 printf(" L1 Trigger bit %d name %s\n",
993 mytree->trigName_L1Bit[0][j],
994 mytree->trigName_L1Name[0][j]);
995 TString nameTrigger = TString(mytree->trigName_L1Name[0][j]);
996 if (nameTrigger.Contains(L1Name, TString::kIgnoreCase)) {
997 L1Bit[totalRunNumbersL1] = mytree->trigName_L1Bit[0][j];
998 numFoundL1++;
999 }
1000 }
1001
1002 totalRunNumbersL1++;
1003 }
1004 jentry++;
1005 }
1006 printf("Number of Runs %d found L1 %d \n",totalRunNumbersL1,
1007 numFoundL1);
1008
1009 mytree->fChain->SetBranchStatus("*",1);
1010
1011 }
1012
1013
1014
1015
1016
1017
1018 void xftsim::GetTriggerBitL2(const char* L2Name) {
1019 Int_t nb;
1020
1021 Int_t nentries = Int_t(mytree->fChain->GetEntries());
1022
1023 bool found = false;
1024 int jentry=0;
1025 printf("Number of entries %d %d\n",nentries);
1026 printf("Looking for L2: %s \n",L2Name);
1027 int numFoundL2 = 0;
1028 while ((totalRunNumbersL2<maxRunNumbers) && jentry<nentries) {
1029
1030 int ientry = mytree->LoadTree(jentry);
1031 int test = mytree->fChain->GetEntry(jentry);
1032 if (mytree->trigName > 0) {
1033 printf("jentry %d runnumber %d L1 triggers %d \n",jentry,
1034 mytree->trigName_RunNumber[0],
1035 mytree->trigName_NumL1Triggers[0]);
1036 RunNumberL2[totalRunNumbersL2] = mytree->trigName_RunNumber[0];
1037 L2Bit[totalRunNumbersL2] = -1;
1038
1039
1040 for (int j=0; j<mytree->trigName_NumL2Triggers[0]; j++) {
1041 printf(" L2 Trigger bit %d name %s\n",
1042 mytree->trigName_L2Bit[0][j],
1043 mytree->trigName_L2Name[0][j]);
1044 TString nameTrigger = TString(mytree->trigName_L2Name[0][j]);
1045 if (nameTrigger.Contains(L2Name, TString::kIgnoreCase)) {
1046 L2Bit[totalRunNumbersL2] = mytree->trigName_L2Bit[0][j];
1047
1048
1049 numFoundL2++;
1050 }
1051
1052 }
1053
1054 totalRunNumbersL2++;
1055 }
1056 jentry++;
1057 }
1058 printf("Number of Runs %d found L2 %d \n",totalRunNumbersL2,
1059 numFoundL2);
1060
1061
1062 }
1063
1064
1065 void xftsim::GetTriggerBitL3(int numTrigs, TString* L3Name) {
1066 Int_t nb;
1067
1068 Int_t nentries = Int_t(mytree->fChain->GetEntries());
1069
1070 bool found = false;
1071 int jentry=0;
1072 printf("GetTriggerBit: Number of entries %d\n",nentries);fflush(stdout);
1073 for (int i=0; i<numTrigs; i++) {
1074 printf("in trig name loop \n");fflush(stdout);
1075
1076 }
1077 printf("out of trig name loop \n");fflush(stdout);
1078 int numFoundL3 = 0;
1079 bool printDone = false;
1080 while ((totalRunNumbersL3<maxRunNumbers) && jentry<nentries) {
1081
1082 int ientry = mytree->LoadTree(jentry);
1083 printf("ientry %d\n",ientry);fflush(stdout);
1084 int test = mytree->fChain->GetEntry(jentry);
1085
1086 if (mytree->trigName > 0) {
1087
1088
1089
1090 RunNumberL3[totalRunNumbersL3] = mytree->trigName_RunNumber[0];
1091 numL3Bit[totalRunNumbersL3] = 0;
1092
1093
1094 for (int j=0; j<mytree->trigName_NumL3Triggers[0]; j++) {
1095 if (!printDone) printf(" L3 Trigger bit %d name %s\n",
1096 mytree->trigName_L3Bit[0][j],
1097 mytree->trigName_L3Name[0][j]);fflush(stdout);
1098 TString nameTrigger = TString(mytree->trigName_L3Name[0][j]);
1099 for (int i=0; i<numTrigs; i++) {
1100 if (nameTrigger.Contains(L3Name[i], TString::kIgnoreCase)) {
1101 printf("found bit %d %s\n",
1102 mytree->trigName_L3Bit[0][j],
1103 mytree->trigName_L3Name[0][j]);
1104 L3Bit[totalRunNumbersL3][numL3Bit[totalRunNumbersL3]]
1105 = mytree->trigName_L3Bit[0][j];
1106 numL3Bit[totalRunNumbersL3]++;
1107 numFoundL3++;
1108 }
1109 }
1110
1111 }
1112
1113 printDone = true;
1114
1115 totalRunNumbersL3++;
1116 }
1117 jentry++;
1118 }
1119 printf("Number of Runs %d found L3 %d \n",totalRunNumbersL3,
1120 numFoundL3);
1121
1122
1123 }
1124
1125
1126 void xftsim::GetTriggerBitL3Run(int numTrigs, TString* L3Name) {
1127
1128 bool found = false;
1129
1130 int numFoundL3 = 0;
1131 bool printDone = false;
1132
1133
1134
1135
1136
1137
1138 if (mytree->trigName > 0) {
1139
1140
1141
1142 RunNumberL3[totalRunNumbersL3] = mytree->trigName_RunNumber[0];
1143 numL3Bit[totalRunNumbersL3] = 0;
1144
1145
1146 for (int j=0; j<mytree->trigName_NumL3Triggers[0]; j++) {
1147 if (!printDone) printf(" L3 Trigger bit %d name %s\n",
1148 mytree->trigName_L3Bit[0][j],
1149 mytree->trigName_L3Name[0][j]);fflush(stdout);
1150 TString nameTrigger = TString(mytree->trigName_L3Name[0][j]);
1151 for (int i=0; i<numTrigs; i++) {
1152 if (nameTrigger.Contains(L3Name[i], TString::kIgnoreCase)) {
1153 printf("found bit %d %s\n",
1154 mytree->trigName_L3Bit[0][j],
1155 mytree->trigName_L3Name[0][j]);
1156 L3Bit[totalRunNumbersL3][numL3Bit[totalRunNumbersL3]]
1157 = mytree->trigName_L3Bit[0][j];
1158 numL3Bit[totalRunNumbersL3]++;
1159 numFoundL3++;
1160 }
1161 }
1162
1163 }
1164
1165 printDone = true;
1166
1167 totalRunNumbersL3++;
1168 }
1169
1170
1171 printf("Number of Runs %d found L3 %d \n",totalRunNumbersL3,
1172 numFoundL3);
1173
1174
1175 }
1176
1177 bool xftsim::testTriggerBit(int runNumber) {
1178 bool found = false;
1179 bool pass1 = false;
1180 bool pass2 = false;
1181 bool pass3 = false;
1182 int iRun = 0;
1183
1184 while ((iRun < totalRunNumbers) && !found) {
1185 if (RunNumber[iRun] == runNumber) {
1186 found = true;
1187
1188
1189
1190 int bitPos = L1Bit[iRun];
1191 printf("Trigger bit %d trigger words %x %x\n",
1192 bitPos,mytree->trigInfo_L1W1NoPS[0],
1193 mytree->trigInfo_L1W1NoPS[1]);
1194 if (bitPos <= 31) {
1195 if (((1<<bitPos) & mytree->trigInfo_L1W1NoPS[0]) > 0) pass1 = true;
1196 } else {
1197 bitPos -= 32;
1198 if (((1<<bitPos) & mytree->trigInfo_L1W2NoPS[0]) > 0) pass1 = true;
1199 }
1200
1201
1202 bitPos = L2Bit[iRun];
1203 int tbitPos = bitPos;
1204 if (bitPos <= 31) {
1205 if (((1<<tbitPos) & mytree->trigInfo_L2W1[0]) > 0) pass2 = true;
1206 } else if (bitPos <= 63) {
1207 tbitPos -= 32;
1208 if (((1<<tbitPos) & mytree->trigInfo_L2W2[0]) > 0) pass2 = true;
1209 } else if (bitPos <= 95) {
1210 tbitPos -= 64;
1211 if (((1<<tbitPos) & mytree->trigInfo_L2W3[0]) > 0) pass2 = true;
1212 } else if (bitPos <= 127) {
1213 tbitPos -= 96;
1214 if (((1<<tbitPos) & mytree->trigInfo_L2W4[0]) > 0) pass2 = true;
1215 }
1216
1217
1218 for (int i=0; i< numL3Bit[iRun]; i++) {
1219 bitPos = L3Bit[iRun][i];
1220 tbitPos = bitPos;
1221 if (bitPos <= 31) {
1222 if (((1<<tbitPos) & mytree->trigInfo_L3W1[0]) > 0) pass3 = true;
1223 } else if (bitPos <= 63) {
1224 tbitPos -= 32;
1225 if (((1<<tbitPos) & mytree->trigInfo_L3W2[0]) > 0) pass3 = true;
1226 } else if (bitPos <= 95) {
1227 tbitPos -= 64;
1228 if (((1<<tbitPos) & mytree->trigInfo_L3W3[0]) > 0) pass3 = true;
1229 } else if (bitPos <= 127) {
1230 tbitPos -= 96;
1231 if (((1<<tbitPos) & mytree->trigInfo_L3W4[0]) > 0) pass3 = true;
1232 } else if (bitPos <= 159) {
1233 tbitPos -= 128;
1234 if (((1<<tbitPos) & mytree->trigInfo_L3W5[0]) > 0) pass3 = true;
1235 } else if (bitPos <= 181) {
1236 tbitPos -= 160;
1237 if (((1<<tbitPos) & mytree->trigInfo_L3W6[0]) > 0) pass3 = true;
1238 }
1239 }
1240
1241 }
1242 iRun++;
1243 }
1244
1245 return pass1&&pass2&&pass3;
1246
1247 }
1248
1249
1250 bool xftsim::testTriggerBitL1(int runNumber) {
1251 bool found = false;
1252 bool pass1 = false;
1253 int iRun = 0;
1254
1255 while ((iRun < totalRunNumbersL1) && !found) {
1256 if (RunNumberL1[iRun] == runNumber) {
1257 found = true;
1258
1259
1260
1261 int bitPos = L1Bit[iRun];
1262 printf("Trigger bit %d trigger words %x %x\n",
1263 bitPos,mytree->trigInfo_L1W1NoPS[0],
1264 mytree->trigInfo_L1W1NoPS[1]);
1265 if (bitPos <= 31) {
1266 if (((1<<bitPos) & mytree->trigInfo_L1W1NoPS[0]) > 0) pass1 = true;
1267 } else {
1268 bitPos -= 32;
1269 if (((1<<bitPos) & mytree->trigInfo_L1W2NoPS[0]) > 0) pass1 = true;
1270 }
1271 }
1272 iRun++;
1273 }
1274
1275 return pass1;
1276
1277 }
1278
1279 bool xftsim::testTriggerBitL2(int runNumber) {
1280 bool found = false;
1281 bool pass2 = false;
1282 int iRun = 0;
1283
1284 while ((iRun < totalRunNumbersL2) && !found) {
1285 if (RunNumberL2[iRun] == runNumber) {
1286 found = true;
1287
1288
1289 int bitPos = L2Bit[iRun];
1290 int tbitPos = bitPos;
1291 if (bitPos <= 31) {
1292 if (((1<<tbitPos) & mytree->trigInfo_L2W1[0]) > 0) pass2 = true;
1293 } else if (bitPos <= 63) {
1294 tbitPos -= 32;
1295 if (((1<<tbitPos) & mytree->trigInfo_L2W2[0]) > 0) pass2 = true;
1296 } else if (bitPos <= 95) {
1297 tbitPos -= 64;
1298 if (((1<<tbitPos) & mytree->trigInfo_L2W3[0]) > 0) pass2 = true;
1299 } else if (bitPos <= 127) {
1300 tbitPos -= 96;
1301 if (((1<<tbitPos) & mytree->trigInfo_L2W4[0]) > 0) pass2 = true;
1302 }
1303 }
1304 iRun++;
1305 }
1306
1307 return pass2;
1308
1309 }
1310
1311 bool xftsim::testTriggerBitL3(int runNumber) {
1312 bool found = false;
1313 bool pass3 = false;
1314 int iRun = 0;
1315 while ((iRun < totalRunNumbersL3) && !found) {
1316 if (RunNumberL3[iRun] == runNumber) {
1317 found = true;
1318
1319 if (!found) {printf("WARNING TRIGGERS NOT in LIST for this run %d\n",runNumber);return false;}
1320
1321
1322 for (int i=0; i< numL3Bit[iRun]; i++) {
1323 int bitPos = L3Bit[iRun][i];
1324 int tbitPos = bitPos;
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334 if (bitPos <= 31) {
1335 if (((1<<tbitPos) & mytree->trigInfo_L3W1[0]) > 0) pass3 = true;
1336 } else if (bitPos <= 63) {
1337 tbitPos -= 32;
1338 if (((1<<tbitPos) & mytree->trigInfo_L3W2[0]) > 0) pass3 = true;
1339 } else if (bitPos <= 95) {
1340 tbitPos -= 64;
1341 if (((1<<tbitPos) & mytree->trigInfo_L3W3[0]) > 0) pass3 = true;
1342 } else if (bitPos <= 127) {
1343 tbitPos -= 96;
1344 if (((1<<tbitPos) & mytree->trigInfo_L3W4[0]) > 0) pass3 = true;
1345 } else if (bitPos <= 159) {
1346 tbitPos -= 128;
1347 if (((1<<tbitPos) & mytree->trigInfo_L3W5[0]) > 0) pass3 = true;
1348 } else if (bitPos <= 181) {
1349 tbitPos -= 160;
1350 if (((1<<tbitPos) & mytree->trigInfo_L3W6[0]) > 0) pass3 = true;
1351 }
1352 }
1353 }
1354 iRun++;
1355 }
1356
1357 return pass3;
1358
1359 }
1360
1361
1362
1363
1364
1365 void xftsim::roadFile(char* pathName)
1366 {
1367 int index = 0;
1368 int ipix_cell[4];
1369 int mcpix[4];
1370 int nPtbins = 0;
1371
1372
1373
1374 std::ifstream f1(pathName);
1375
1376
1377
1378
1379 for(index=0; index < 4; index++)
1380 {
1381 f1 >> ipix_cell[index];
1382 }
1383
1384
1385 index = 0;
1386 for(index=0; index < 4; index++)
1387 {
1388 f1 >> mcpix[index];
1389 numPix[index][1] = mcpix[index];
1390 }
1391
1392
1393
1394
1395 f1 >> nlink;
1396
1397
1398
1399 f1 >> nPtbins;
1400
1401
1402
1403 int temp;
1404 for(index=0; index < nPtbins; index++)
1405 {
1406 f1 >> temp;
1407 f1 >> ptbins[index];
1408 printf("4pt bin %d pt value %g \n",index,ptbins[index]);
1409 }
1410 f1.close();
1411 }
1412
1413
1414
1415
1416
1417 void xftsim::road3File(char* pathName)
1418 {
1419 int index = 0;
1420 int ipix_cell[4];
1421 int mcpix[4];
1422 int nPtbins = 0;
1423
1424 std::ifstream f1(pathName);
1425
1426
1427
1428 for(index=0; index < 4; index++)
1429 {
1430 f1>>ipix_cell[index];
1431 }
1432
1433
1434 for(index=0; index < 4; index++)
1435 {
1436 f1 >> mcpix[index];
1437 }
1438
1439
1440 f1>>nlink3;
1441 if(nlink3 != nlink)
1442 printf("**** WARNING **** 4-layer and 3-layer roads databases have different number of linkers\n");
1443
1444
1445 f1 >> nPtbins;
1446
1447
1448 int temp;
1449 for(index=0; index < nPtbins; index++)
1450 {
1451 f1 >> temp;
1452 f1 >> ptbins3[index];
1453 printf("3pt bin %d pt value %g \n",index,ptbins3[index]);
1454 }
1455 f1.close();
1456 }
1457
Send problems or questions to cdfcode@fnal.gov