Compute the mean and the RMS of the t0 from the maps and write them to the DB with channel granularity.
Loop on superlayer to correct between even-odd layers (2 different test pulse lines!)
407 cout <<
"[DTT0CalibrationNewPerLayer]Writing histos to file!" << endl;
411 for(map<DTWireId, TH1I*>::const_iterator wHisto =
theHistoWireMap.begin();
414 (*wHisto).second->Write();
416 for(map<DTLayerId, TH1I*>::const_iterator lHisto =
theHistoLayerMap.begin();
419 (*lHisto).second->Write();
423 cout <<
"[DTT0CalibrationNew] Compute and store t0 and sigma per wire" << endl;
433 double t0 = (*wiret0).second/
nDigiPerWire[(*wiret0).first];
434 DTChamberId chamberId = ((*wiret0).first).chamberId();
444 cout<<
"[DTT0CalibrationNew] ERROR: no digis in wire "<<(*wiret0).first<<endl;
451 const vector<DTSuperLayer*> superLayers =
dtGeom->superLayers();
453 for(vector<DTSuperLayer*>::const_iterator sl = superLayers.begin();
454 sl != superLayers.end(); sl++) {
458 double oddLayersMean=0;
459 double evenLayersMean=0;
460 double oddLayersDen=0;
461 double evenLayersDen=0;
465 if((*wiret0).first.layerId().superlayerId() == (*sl)->id()){
467 cout<<
"[DTT0CalibrationNew] Superlayer "<<(*sl)->id()
468 <<
"layer " <<(*wiret0).first.layerId().layer()<<
" with "<<(*wiret0).second<<endl;
469 if(((*wiret0).first.layerId().layer()) % 2){
470 oddLayersMean = oddLayersMean + (*wiret0).second;
474 evenLayersMean = evenLayersMean + (*wiret0).second;
479 oddLayersMean = oddLayersMean/oddLayersDen;
480 evenLayersMean = evenLayersMean/evenLayersDen;
481 if(
debug && oddLayersMean)
482 cout<<
"[DTT0CalibrationNew] Relative T0 mean for odd layers "<<oddLayersMean<<
" even layers"<<evenLayersMean<<endl;
485 double oddLayersSigma=0;
486 double evenLayersSigma=0;
490 if((*wiret0).first.layerId().superlayerId() == (*sl)->id()){
491 if(((*wiret0).first.layerId().layer()) % 2){
492 oddLayersSigma = oddLayersSigma + ((*wiret0).second - oddLayersMean) * ((*wiret0).second - oddLayersMean);
495 evenLayersSigma = evenLayersSigma + ((*wiret0).second - evenLayersMean) * ((*wiret0).second - evenLayersMean);
499 oddLayersSigma = oddLayersSigma/oddLayersDen;
500 evenLayersSigma = evenLayersSigma/evenLayersDen;
501 oddLayersSigma =
sqrt(oddLayersSigma);
502 evenLayersSigma =
sqrt(evenLayersSigma);
504 if(
debug && oddLayersMean)
505 cout<<
"[DTT0CalibrationNew] Relative T0 sigma for odd layers "<<oddLayersSigma<<
" even layers"<<evenLayersSigma<<endl;
508 double oddLayersFinalMean=0;
509 double evenLayersFinalMean=0;
513 if((*wiret0).first.layerId().superlayerId() == (*sl)->id()){
514 if(((*wiret0).first.layerId().layer()) % 2){
515 if(
abs((*wiret0).second - oddLayersMean) < (2*oddLayersSigma))
516 oddLayersFinalMean = oddLayersFinalMean + (*wiret0).second;
519 if(
abs((*wiret0).second - evenLayersMean) < (2*evenLayersSigma))
520 evenLayersFinalMean = evenLayersFinalMean + (*wiret0).second;
524 oddLayersFinalMean = oddLayersFinalMean/oddLayersDen;
525 evenLayersFinalMean = evenLayersFinalMean/evenLayersDen;
526 if(
debug && oddLayersMean)
527 cout<<
"[DTT0CalibrationNew] Final relative T0 mean for odd layers "<<oddLayersFinalMean<<
" even layers"<<evenLayersFinalMean<<endl;
532 if((*wiret0).first.layerId().superlayerId() == (*sl)->id()){
534 if(((*wiret0).first.layerId().layer()) % 2)
535 t0 = (*wiret0).second + (evenLayersFinalMean - oddLayersFinalMean);
537 t0 = (*wiret0).second;
539 cout<<
"[DTT0CalibrationNew] Wire "<<(*wiret0).first<<
" has t0 "<<(*wiret0).second<<
" (relative, after even-odd layer corrections) "
549 cout <<
"[DTT0CalibrationNew]Computing relative t0 wrt to chamber average" << endl;
551 map<DTChamberId,double> sumT0ByChamber;
552 map<DTChamberId,int> countT0ByChamber;
556 (*tzero).first.stationId,
557 (*tzero).first.sectorId);
558 sumT0ByChamber[chamberId] = sumT0ByChamber[chamberId] + (*tzero).second.t0mean;
559 countT0ByChamber[chamberId]++;
566 (*tzero).first.stationId,
567 (*tzero).first.sectorId);
568 double t0mean = ((*tzero).second.t0mean) - (sumT0ByChamber[chamberId]/countT0ByChamber[chamberId]);
569 double t0rms = (*tzero).second.t0rms;
570 DTWireId wireId((*tzero).first.wheelId,
571 (*tzero).first.stationId,
572 (*tzero).first.sectorId,
574 (*tzero).first.layerId,
575 (*tzero).first.cellId);
576 t0sWRTChamber->
set(wireId,
582 cout<<
"Changing t0 of wire "<<wireId<<
" from "<<(*tzero).second.t0mean<<
" to "<<t0mean<<endl;
588 cout <<
"[DTT0CalibrationNew]Writing values in DB!" << endl;
590 string t0Record =
"DTT0Rcd";
const_iterator begin() const
int set(int wheelId, int stationId, int sectorId, int slId, int layerId, int cellId, float t0mean, float t0rms, DTTimeUnits::type unit)
std::map< DTChamberId, double > theRefT0ByChamber
std::map< DTWireId, TH1I * > theHistoWireMap
std::map< DTChamberId, double > theSumT0ByChamber
std::map< DTWireId, double > theSigmaT0PerWire
std::map< DTChamberId, int > theCountT0ByChamber
std::map< DTWireId, int > nDigiPerWire
std::map< DTWireId, double > theRelativeT0PerWire
const_iterator end() const
std::map< DTLayerId, TH1I * > theHistoLayerMap
std::map< DTWireId, double > theAbsoluteT0PerWire
std::vector< std::pair< DTT0Id, DTT0Data > >::const_iterator const_iterator
Access methods to data.
static const double tzero[3]
std::map< DTWireId, double > qK
edm::ESHandle< DTGeometry > dtGeom
static void writeToDB(std::string record, T *payload)