137 {
138
140 log << MSG::INFO << "TofRawDataProvider::tofDataMapFull()" << endmsg;
141
142 if ( !m_tofDataMap.empty() )
143 {
144
145 log << MSG::WARNING << "TofRawDataProvider::tofDataMapFull: m_tofDataMap is NOT empty!"
146 << endmsg;
147
149 for ( ;
iter != m_tofDataMap.end();
iter++ ) {
delete ( *iter ).second; }
150 m_tofDataMap.clear();
151 }
152
153 std::string evtDataSvc_name( "EventDataSvc" );
154
155
156
157
158 IDataProviderSvc* eventSvc;
159 StatusCode sc =
m_svcLocator->service( evtDataSvc_name, eventSvc,
true );
160 if ( !sc.isSuccess() )
161 {
162 log << MSG::FATAL
163 << "TofRawDataProvider::tofDataMapFull: ERROR Could not load "
164 "EventDataSvc"
165 << endmsg;
166 return;
167 }
168
169
170 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc, "/Event/EventHeader" );
171 if ( !eventHeader )
172 {
173 log << MSG::FATAL << "TofRawDataProvider could not find Event Header!" << endmsg;
174 return;
175 }
176 m_run = eventHeader->runNumber();
177 m_event = eventHeader->eventNumber();
178
180 bool mc = ( m_run < 0 ) ? true : false;
182 qCorr = qCorr && ( !mc );
185 misLable = ( !mc && misLable );
186
187 int identmp = -1;
188 vector<int> deadId;
189 for ( unsigned int i = 0; i < 5; i++ )
190 {
192 if ( identmp != 0x2fffffff ) { deadId.push_back( identmp ); }
194 if ( identmp != 0x2fffffff ) { deadId.push_back( identmp ); }
195 }
196 for ( unsigned int i = 0; i < 500; i++ )
197 {
199 if ( identmp == 0x2fffffff ) break;
200 else { deadId.push_back( identmp ); }
201 }
202
203
204 SmartDataPtr<TofDigiCol> tofDigiCol( eventSvc, "/Event/Digi/TofDigiCol" );
205 if ( !tofDigiCol )
206 {
207 log << MSG::WARNING << "TofRawDataProvider::tofDataMapFull: Could not find Tof Digi Data!"
208 << endmsg;
209 return;
210 }
211
212 int qnumber = 0;
213 int tnumber = 0;
214
215 std::vector<Adc*> chargeVec;
216 std::vector<Tdc*> timeVec;
217
218 TofDigiCol::iterator
iter = tofDigiCol->begin();
219 for ( ;
iter != tofDigiCol->end();
iter++ )
220 {
221 Identifier iden = ( *iter )->identify();
222 unsigned int iden_value = iden.
get_value();
223
224 bool sameId = false;
225 vector<int>::iterator iter_dead = deadId.begin();
226 for ( ; iter_dead != deadId.end(); iter_dead++ )
227 {
228 if ( iden_value == ( *iter_dead ) )
229 {
230 sameId = true;
231 break;
232 }
233 }
234 if ( sameId )
235 {
236 if ( mc ) { continue; }
237 else
238 {
239 std::string bore;
240 int layertmp = -1;
241 int tofidtmp = -1;
243 {
244 bore = string( "Barrel" );
247 }
249 {
250 bore = string( "East Endcap" );
252 }
254 {
255 bore = string( "West Endcap" );
257 }
259 {
260 bore = string( "ETF(MRPC)" );
262 }
263
264
265
266
267
268 }
269 }
270
273 continue;
274
275 unsigned int overflow = ( *iter )->getOverflow();
276 if (
TofID::is_scin( iden ) && ( ( overflow & 0xfe000000 ) == 0xfe000000 ) )
continue;
277
278
279
280
281
282
283
285 {
286
287 if ( ( iden_value & 0x2fffffe0 ) == 0x2000c800 )
288 {
289 iden_value = 0x2000c900 + ( iden_value & 0x1f );
290 iden = Identifier( iden_value );
291 }
292
293 if ( ( iden_value & 0x2fffffe0 ) == 0x2000c820 )
294 {
295 iden_value = 0x2000c8e0 + ( iden_value & 0x1f );
296 iden = Identifier( iden_value );
297 }
298 }
299
300
301
302
303
304 bool multiQ = ( ( overflow & 0x8 ) != 0 );
305 bool multiT = ( ( overflow & 0x4 ) != 0 );
306
307 unsigned int tdcChannel = ( *iter )->getTimeChannel();
308 unsigned int adcChannel = ( *iter )->getChargeChannel();
310 { adcChannel = ( adcChannel | 0x80000 ); }
311
312 if ( ( adcChannel & 0x7fffffff ) != 0x7fffffff )
313 {
314 Adc* adc = new Adc;
317
318
319
320
322 { adcChannel += 0x18000; }
323
324
326 qnumber++;
328 chargeVec.push_back( adc );
329 }
330
331 if ( tdcChannel != 0x7fffffff )
332 {
333 Tdc* tdc = new Tdc;
334
335
336
337
339 { tdcChannel += 0x18000; }
340
341
343 tnumber++;
345 timeVec.push_back( tdc );
346 }
347
348 if ( multiT || multiQ )
349 {
350 TofDigiCol::iterator iter_next =
iter + 1;
351 if ( iter_next != tofDigiCol->end() )
352 {
353 unsigned int idenNext_value = ( ( *iter_next )->identify() ).get_value();
354 if ( iden_value == idenNext_value ) continue;
355 }
356 }
357
358 qnumber = 0;
359 tnumber = 0;
360
361 std::vector<PmtData*> pmtDataVec;
363 {
364 std::vector<Tdc*>::iterator iter_t = timeVec.begin();
365 for ( ; iter_t != timeVec.end(); iter_t++ )
366 {
367 int tclock = ( *iter_t )->clock();
368 PmtData* pmt = new PmtData;
370 pmt->
setTdc( ( *iter_t ) );
371 std::vector<Adc*>::iterator iter_q = chargeVec.begin();
372 for ( ; iter_q != chargeVec.end(); iter_q++ )
373 {
374 if ( ( *iter_q )->times() != -1 ) { continue; }
375 int qclock = ( *iter_q )->clock();
376 if (
abs( tclock - qclock ) < 2 )
377 {
378 if ( ( pmt->
quality() & 0x2 ) != 0 )
379 {
380 if ( ( *iter_q )->value() > pmt->
adc() )
381 {
383 pmt->
setAdc( ( *iter_q ) );
384 }
385 }
386 else
387 {
388 pmt->
setAdc( ( *iter_q ) );
389 }
390 }
391 }
392 pmtDataVec.push_back( pmt );
393 }
394
395 std::vector<Adc*>::iterator iter_q = chargeVec.begin();
396 for ( ; iter_q != chargeVec.end(); iter_q++ )
397 {
398 if ( ( *iter_q )->times() != -1 ) { continue; }
399 PmtData* pmt = new PmtData;
401 pmt->
setAdc( ( *iter_q ) );
402 pmtDataVec.push_back( pmt );
403 }
404 }
405
407 {
408 std::vector<Tdc*>::iterator iter_t = timeVec.begin();
409 for ( ; iter_t != timeVec.end(); iter_t++ )
410 {
411 std::vector<Adc*>::iterator iter_q = chargeVec.begin();
412 for ( ; iter_q != chargeVec.end(); iter_q++ )
413 {
414 if ( ( ( *iter_q )->qtc() - ( *iter_t )->value() ) >
totForward &&
415 ( ( *iter_q )->qtc() - ( *iter_t )->value() ) <
totBackward )
416 {
417 PmtData* pmt = new PmtData;
419 pmt->
setTdc( ( *iter_t ) );
420 pmt->
setAdc( ( *iter_q ) );
421 pmtDataVec.push_back( pmt );
422 }
423 }
424 if ( ( *iter_t )->times() == -1 )
425 {
426 PmtData* pmt = new PmtData;
427 pmt->
setTdc( ( *iter_t ) );
428 pmtDataVec.push_back( pmt );
429 }
430 }
431
432 std::vector<Adc*>::iterator iter_q = chargeVec.begin();
433 for ( ; iter_q != chargeVec.end(); iter_q++ )
434 {
435 if ( ( *iter_q )->times() != -1 ) { continue; }
436 PmtData* pmt = new PmtData;
438 pmt->
setAdc( ( *iter_q ) );
439 pmtDataVec.push_back( pmt );
440 }
441 }
442
443 chargeVec.clear();
444 timeVec.clear();
445
446 unsigned int iden_value_key = ( iden_value & 0xfffffffe );
448 {
450
453 if ( ( barrel_ec == 0 ) || ( barrel_ec == 2 ) )
454 {
455 std::vector<PmtData*>::iterator iter_pmt = pmtDataVec.begin();
456 for ( ; iter_pmt != pmtDataVec.end(); iter_pmt++ )
457 {
458 TofData* tof = new TofData;
459 if ( misLable )
460 {
462 if ( barrel_ec == 2 && tofid == 42 )
463 {
465 iden_value_key = iden91;
467 }
468 if ( barrel_ec == 2 && tofid == 43 )
469 {
471 iden_value_key = iden90;
473 }
474 }
478 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
479 }
480 }
481 else if ( barrel_ec == 1 )
482 {
483 unsigned int count = m_tofDataMap.count( iden_value_key );
485 {
486 std::vector<PmtData*>::iterator iter_pmt = pmtDataVec.begin();
487 for ( ; iter_pmt != pmtDataVec.end(); iter_pmt++ )
488 {
489 TofData* tof = new TofData;
491 if ( end == 0 ) { tof->
setForward( ( *iter_pmt ) ); }
494 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
495 }
496 }
497 else
498 {
499 pair<IterTofDataMap, IterTofDataMap> range =
500 m_tofDataMap.equal_range( iden_value_key );
501 std::vector<PmtData*>::iterator iter_pmt = pmtDataVec.begin();
502 for ( ; iter_pmt != pmtDataVec.end(); iter_pmt++ )
503 {
504 bool used = false;
506 for (
unsigned int tofDataNumber = 0; tofDataNumber <
count;
507 tofDataNumber++,
iter++ )
508 {
509
510 bool matched = false;
511 if ( end == 0 )
512 {
513 if ( ( ( *iter_pmt )->quality() & 0x1 ) != 0 )
514 {
515 if ( ( ( ( *iter ).second )->quality() & 0x1 ) != 0 )
516 {
517 double time1 = ( *iter_pmt )->tdc();
518 double time2 = ( ( *iter ).second )->tdc2();
520 }
521 else
522 {
523 if ( ( ( ( *iter ).second )->quality() & 0x2 ) != 0 )
524 {
525 double time1 = ( *iter_pmt )->tclock();
526 double time2 = ( *iter_pmt )->qclock();
527 double time3 = ( ( *iter ).second )->qclock2();
530 }
531 }
532 }
533 else
534 {
535 if ( ( ( *iter_pmt )->quality() & 0x2 ) != 0 )
536 {
537 if ( ( ( ( *iter ).second )->quality() & 0x1 ) != 0 )
538 {
539 if ( ( ( ( ( *iter ).second )->quality() & 0x2 ) != 0 ) )
540 {
541 double time1 = ( *iter_pmt )->qclock();
542 double time2 = ( ( *iter ).second )->tclock2();
543 double time3 = ( ( *iter ).second )->qclock2();
546 }
547 }
548 else
549 {
550 if ( ( ( ( ( *iter ).second )->quality() & 0x2 ) != 0 ) )
551 {
552 double time1 = ( *iter_pmt )->qclock();
553 double time2 = ( ( *iter ).second )->qclock2();
555 }
556 }
557 }
558 }
559
560 if ( matched )
561 {
562 used = true;
563 if ( ( ( ( *iter ).second )->quality() & 0xc ) == 0 )
564 { ( ( *iter ).second )->setForward( ( *iter_pmt ) ); }
565 else
566 {
567 TofData* tof = new TofData;
570 tof->
setBackward( ( ( *iter ).second )->backward() );
572 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
573 }
574 }
575
576 }
577 else
578 {
579 if ( ( ( *iter_pmt )->quality() & 0x1 ) != 0 )
580 {
581 if ( ( ( ( *iter ).second )->quality() & 0x4 ) != 0 )
582 {
583 double time1 = ( *iter_pmt )->tdc();
584 double time2 = ( ( *iter ).second )->tdc1();
586 }
587 else
588 {
589 if ( ( ( ( *iter ).second )->quality() & 0x8 ) != 0 )
590 {
591 double time1 = ( *iter_pmt )->tclock();
592 double time2 = ( *iter_pmt )->qclock();
593 double time3 = ( ( *iter ).second )->qclock1();
596 }
597 }
598 }
599 else
600 {
601 if ( ( ( *iter_pmt )->quality() & 0x2 ) != 0 )
602 {
603 if ( ( ( ( *iter ).second )->quality() & 0x4 ) != 0 )
604 {
605 if ( ( ( ( ( *iter ).second )->quality() & 0x8 ) != 0 ) )
606 {
607 double time1 = ( *iter_pmt )->qclock();
608 double time2 = ( ( *iter ).second )->tclock1();
609 double time3 = ( ( *iter ).second )->qclock1();
612 }
613 else {}
614 }
615 else
616 {
617 if ( ( ( ( ( *iter ).second )->quality() & 0x8 ) != 0 ) )
618 {
619 double time1 = ( *iter_pmt )->qclock();
620 double time2 = ( ( *iter ).second )->qclock1();
622 }
623 }
624 }
625 }
626
627 if ( matched )
628 {
629 used = true;
630 if ( ( ( ( *iter ).second )->quality() & 0x3 ) == 0 )
631 { ( ( *iter ).second )->setBackward( ( *iter_pmt ) ); }
632 else
633 {
634 TofData* tof = new TofData;
636 tof->
setForward( ( ( *iter ).second )->forward() );
639 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
640 }
641 }
642 }
643 }
644
645 if ( !used )
646 {
647 TofData* tof = new TofData;
649 if ( end == 0 ) { tof->
setForward( ( *iter_pmt ) ); }
652 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
653 }
654 }
655 }
656 }
657 }
658
660 {
661
666
667 unsigned int count = m_tofDataMap.count( iden_value_key );
669 {
670 std::vector<PmtData*>::iterator iter_pmt = pmtDataVec.begin();
671 for ( ; iter_pmt != pmtDataVec.end(); iter_pmt++ )
672 {
673 TofData* tof = new TofData;
675 if ( end == 0 ) { tof->
setForward( ( *iter_pmt ) ); }
678 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
679 }
680 }
681 else
682 {
683 pair<IterTofDataMap, IterTofDataMap> range =
684 m_tofDataMap.equal_range( iden_value_key );
685 std::vector<PmtData*>::iterator iter_pmt = pmtDataVec.begin();
686 for ( ; iter_pmt != pmtDataVec.end(); iter_pmt++ )
687 {
688 bool used = false;
690 for (
unsigned int tofDataNumber = 0; tofDataNumber <
count;
691 tofDataNumber++,
iter++ )
692 {
693 bool matched = false;
694 if ( end == 0 )
695 {
696 if ( ( ( *iter_pmt )->quality() & 0x1 ) != 0 )
697 {
698 if ( ( ( ( *iter ).second )->quality() & 0x1 ) != 0 )
699 {
700 double time1 = ( *iter_pmt )->tdc();
701 double time2 = ( ( *iter ).second )->tdc2();
703 if ( endcap == 0 && tofid == 13 && strip == 5 )
705 }
706 }
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739 if ( matched )
740 {
741 used = true;
742 if ( ( ( ( *iter ).second )->quality() & 0xc ) == 0 )
743 { ( ( *iter ).second )->setForward( ( *iter_pmt ) ); }
744 else
745 {
746 TofData* tof = new TofData;
749 tof->
setBackward( ( ( *iter ).second )->backward() );
751 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
752 }
753 }
754 }
755 else
756 {
757 if ( ( ( *iter_pmt )->quality() & 0x1 ) != 0 )
758 {
759 if ( ( ( ( *iter ).second )->quality() & 0x4 ) != 0 )
760 {
761 double time1 = ( *iter_pmt )->tdc();
762 double time2 = ( ( *iter ).second )->tdc1();
764 if ( endcap == 0 && tofid == 13 && strip == 5 )
766 }
767 }
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800 if ( matched )
801 {
802 used = true;
803 if ( ( ( ( *iter ).second )->quality() & 0x3 ) == 0 )
804 { ( ( *iter ).second )->setBackward( ( *iter_pmt ) ); }
805 else
806 {
807 TofData* tof = new TofData;
809 tof->
setForward( ( ( *iter ).second )->forward() );
812 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
813 }
814 }
815 }
816 }
817
818 if ( !used )
819 {
820 TofData* tof = new TofData;
822 if ( end == 0 ) { tof->
setForward( ( *iter_pmt ) ); }
825 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
826 }
827 }
828 }
829 }
830
831 pmtDataVec.clear();
832 }
833
834 return;
835
836}
const double timeDiffMRPC
void setValue(Identifier identify, int value)
virtual const int BrWest(unsigned int No)=0
virtual const int QElec()=0
virtual const int BrEast(unsigned int No)=0
virtual const int QCorr()=0
virtual const int MisLable()=0
virtual StatusCode chooseConstants(int run, int event)=0
virtual const int Endcap(unsigned int No)=0
value_type get_value() const
void setIdentify(unsigned int iden)
unsigned int quality() const
void setForward(PmtData *pmt)
void setTMatched(bool tmatched)
void setBackward(PmtData *pmt)
void setIdentify(Identifier identify)
static int endcap(const Identifier &id)
static int strip(const Identifier &id)
static bool is_scin(const Identifier &id)
static int end(const Identifier &id)
static bool is_barrel(const Identifier &id)
Test for barrel.
static int phi_module(const Identifier &id)
static int barrel_ec(const Identifier &id)
Values of different levels (failure returns 0).
static value_type getIntID(int barrel_ec, int layer, int phi_module, int end)
static int layer(const Identifier &id)
static int module(const Identifier &id)
void setNumber(int number)