ATLAS Offline Software
Functions
TRTCalibrator.cxx File Reference
#include "TRTCalibrator.h"
#include "Calibrator.h"
#include "TRT_CalibData/TrackInfo.h"
#include "TrkTrack/Track.h"
#include "TrkParameters/TrackParameters.h"
#include "TrkEventPrimitives/LocalParameters.h"
#include "EventPrimitives/EventPrimitives.h"
#include "TrkRIO_OnTrack/RIO_OnTrack.h"
#include "InDetRIO_OnTrack/TRT_DriftCircleOnTrack.h"
#include "InDetPrepRawData/TRT_DriftCircle.h"
#include "TrkPrepRawData/PrepRawData.h"
#include "AtlasDetDescr/AtlasDetectorID.h"
#include "InDetIdentifier/TRT_ID.h"
#include "TRT_ConditionsData/RtRelation.h"
#include "TRT_ConditionsData/BasicRtRelation.h"
#include "TRT_ConditionsData/DinesRtRelation.h"
#include "TRT_ConditionsData/BinnedRtRelation.h"
#include "CommissionEvent/ComTime.h"
#include "TRT_ReadoutGeometry/TRT_DetectorManager.h"
#include <TNtuple.h>
#include <TFile.h>
#include <fstream>

Go to the source code of this file.

Functions

bool TRTCalibrator::calibrate ATLAS_NOT_THREAD_SAFE ()
 Install fatal handler with default options. More...
 

Function Documentation

◆ ATLAS_NOT_THREAD_SAFE()

bool TRTCalibrator::calibrate ATLAS_NOT_THREAD_SAFE ( )
inline

Install fatal handler with default options.

This is meant to be easy to call from python via ctypes.

Install fatal handler with default options.

getLorentzAngle() Read LorentzAngle from HIST and write out into local DB

getBSErrors() Read BSErrors from Monitoring HIST and write out into local DB

getEfficiency() Read Efficiency from Monitoring HIST and write out into local DB

getRawOccupancy() Read RawOccupancy from Monitoring HIST and write out into local DB

getNoiseOccupancy() Read NoiseOccupancy from HIST and write out into local DB

getNoisyStrip() Find noisy strips from hitmaps and write out into xml/db formats

Definition at line 367 of file TRTCalibrator.cxx.

367  {
368 
369  float sid;
371  const InDetDD::TRT_BaseElement* strawelement;
372  const InDetDD::TRT_BarrelElement* barrelelement;
373  const InDetDD::TRT_EndcapElement* endcapelement;
374  int nTRThist=0, ndethist=0, nlayhist=0, nmodhist=0, nbrdhist=0, nchphist=0, nstwhist=0;
375  int nTRThistAr=0, ndethistAr=0, nlayhistAr=0, nmodhistAr=0, nbrdhistAr=0, nchphistAr=0, nstwhistAr=0;
376  databundle hitdata;
377 
378  std::string infile=m_hittuple;
379  std::string outfile="calibout";
380 
381  std::string detname="Detector";
382  std::string layname="Layer";
383  if (!m_SplitBarrel) {
384  detname="WholeBarrel";
385  layname="WholeBarrelLayer";
386  }
387 
388  //create Calibrator objects for each sub-level
389  Calibrator TRT(0,"TRT",m_mint0,m_minrt,m_rtrel,m_rtbinning,m_t0offset);
390  Calibrator Detector(1,detname.data(),m_mint0,m_minrt,m_rtrel,m_rtbinning,m_t0offset);
391  Calibrator Layer(2,layname.data(),m_mint0,m_minrt,m_rtrel,m_rtbinning,m_t0offset);
392  Calibrator Module(3,"Module",m_mint0,m_minrt,m_rtrel,m_rtbinning,m_t0offset);
393  Calibrator Board(4,"Board",m_mint0,m_minrt,m_rtrel,m_rtbinning,m_t0offset);
394  Calibrator Chip(5,"Chip",m_mint0,m_minrt,m_rtrel,m_rtbinning,m_t0offset);
395  Calibrator Straw(6,"Straw",m_mint0,m_minrt,m_rtrel,m_rtbinning,m_t0offset);
396 
397 
398  // make a map of calibrators (so that they can be looped over)
399  std::map<std::string,Calibrator*> calibrators;
400  calibrators["TRT"]=&TRT;
401  calibrators["Detector"]=&Detector;
402  calibrators["Layer"]=&Layer;
403  calibrators["Module"]=&Module;
404  calibrators["Board"]=&Board;
405  calibrators["Chip"]=&Chip;
406  calibrators["Straw"]=&Straw;
407 
408  //use default configurations unless "user" option is used
409  if(m_calsub!="user"){
410  m_doRt=m_config[m_calsub].CalibrateRt;
411  m_doT0=m_config[m_calsub].CalibrateT0;
412  m_doRes=m_config[m_calsub].FitResidual;
413  m_beQuiet=m_config[m_calsub].NoHistograms;
414  m_doOutPrint=m_config[m_calsub].PrintT0Out;
415  m_doRtPrint=m_config[m_calsub].PrintRtOut;
416  m_doLogPrint=m_config[m_calsub].PrintLog;
417  }
418 
419  //configure the calibrators
420  for (const std::string& s : m_doRt) calibrators[s]->dort=true;
421  for (const std::string& s : m_doT0) calibrators[s]->dot0=true;
422  for (const std::string& s : m_doRes) calibrators[s]->dores=true;
423  for (const std::string& s : m_beQuiet) calibrators[s]->bequiet=true;
424  for (const std::string& s : m_doOutPrint) calibrators[s]->printt0=true;
425  for (const std::string& s : m_doRtPrint) calibrators[s]->printrt=true;
426  for (const std::string& s : m_doLogPrint) calibrators[s]->printlog=true;
427  for (const std::string& s : m_useBoardRef) calibrators[s]->usebref=true;
428  for (std::pair<const std::string, Calibrator*>& p : calibrators) {
429  Calibrator* calib = p.second;
430  calib->usep0=m_useP0;
431  calib->floatp3=m_floatP3;
432  calib->useshortstraws=m_DoShortStrawCorrection;
433 
434  if (m_doRt.size()==0) calib->nort=true;
435  if (m_doT0.size()==0) calib->not0=true;
436 
437  std::set<int> selset;
438  GetSubLevels(m_selstring,calib->level+1,&selset); //get the set of selections for level "level+1" from the m_selstring ...
439  for (std::set<int>::iterator imod=selset.begin(); imod!=selset.end(); ++imod){
440  calib->selection = selset;//... and configure the calibrator with them
441  }
442  }
443 
444  // FOR ARGON:
445  Calibrator TRT_Ar (0,"TRT_Ar" ,m_mint0,m_minrt,m_rtrel,m_rtbinning,m_t0offset);
446  Calibrator Detector_Ar(1,"Detector_Ar",m_mint0,m_minrt,m_rtrel,m_rtbinning,m_t0offset);
447  Calibrator Layer_Ar (2,"Layer_Ar" ,m_mint0,m_minrt,m_rtrel,m_rtbinning,m_t0offset);
448  Calibrator Module_Ar (3,"Module_Ar" ,m_mint0,m_minrt,m_rtrel,m_rtbinning,m_t0offset);
449  Calibrator Board_Ar (4,"Board_Ar" ,m_mint0,m_minrt,m_rtrel,m_rtbinning,m_t0offset);
450  Calibrator Chip_Ar (5,"Chip_Ar" ,m_mint0,m_minrt,m_rtrel,m_rtbinning,m_t0offset);
451  Calibrator Straw_Ar (6,"Straw_Ar" ,m_mint0,m_minrt,m_rtrel,m_rtbinning,m_t0offset);
452 
453  // make a map of calibrators (so that they can be looped over)
454  std::map<std::string,Calibrator*> calibratorsAr;
455  calibratorsAr["TRT"] =&TRT_Ar;
456  calibratorsAr["Detector"] =&Detector_Ar;
457  calibratorsAr["Layer"] =&Layer_Ar;
458  calibratorsAr["Module"] =&Module_Ar;
459  calibratorsAr["Board"] =&Board_Ar;
460  calibratorsAr["Chip"] =&Chip_Ar;
461  calibratorsAr["Straw"] =&Straw_Ar;
462 
463  //configure the calibrators
464  for (const std::string& s : m_doRt) calibratorsAr[s]->dort=true;
465  for (const std::string& s : m_doT0) calibratorsAr[s]->dot0=true;
466  for (const std::string& s : m_doRes) calibratorsAr[s]->dores=true;
467  for (const std::string& s : m_beQuiet) calibratorsAr[s]->bequiet=true;
468  for (const std::string& s : m_doOutPrint) calibratorsAr[s]->printt0=true;
469  for (const std::string& s : m_doRtPrint) calibratorsAr[s]->printrt=true;
470  for (const std::string& s : m_doLogPrint) calibratorsAr[s]->printlog=true;
471  for (const std::string& s : m_useBoardRef) calibratorsAr[s]->usebref=true;
472  for (std::pair<const std::string, Calibrator*>& p : calibratorsAr) {
473  Calibrator* calib = p.second;
474  calib->usep0=m_useP0;
475  calib->floatp3=m_floatP3;
476  calib->useshortstraws=m_DoShortStrawCorrection;
477 
478  if (m_doRt.size()==0) calib->nort=true;
479  if (m_doT0.size()==0) calib->not0=true;
480 
481  std::set<int> selset;
482  GetSubLevels(m_selstring,calib->level+1,&selset); //get the set of selections for level "level+1" from the m_selstring ...
483  for (std::set<int>::iterator imod=selset.begin(); imod!=selset.end(); ++imod){
484  calib->selection = selset;//... and configure the calibrator with them
485  }
486  }
487 
488 
489 
490  m_options = '_' + TRT.GetOptString() + '_' + Detector.GetOptString() + '_' + Layer.GetOptString() + '_' + Module.GetOptString() + '_' + Board.GetOptString() + '_' + Chip.GetOptString() + '_' + Straw.GetOptString();
491  if(m_calsub!="user") m_selstring = '_' + TRT.GetSelString() + '_' + Detector.GetSelString() + '_' + Layer.GetSelString() + '_' + Module.GetSelString() + '_' + Board.GetSelString() + '_' + Chip.GetSelString() + '_' + Straw.GetSelString();
492 
493  //print some info
494  ATH_MSG_INFO(" ");
495  ATH_MSG_INFO( "INPUT FILE : " << infile );
496  ATH_MSG_INFO( "OUTPUT FILE : " << outfile );
497  ATH_MSG_INFO( "SELECTION STRING : " << m_selstring );
498  ATH_MSG_INFO( "OPTION STRING : " << m_options );
499  ATH_MSG_INFO( "RT RELATION : " << m_rtrel );
500  ATH_MSG_INFO( "MIN STATISTICS : RT=" << m_minrt << ", T0=" << m_mint0 );
501  ATH_MSG_INFO( "T0 OFFSET : " << m_t0offset );
502  ATH_MSG_INFO(" ");
503  ATH_MSG_INFO( TRT.PrintInfo() );
504  ATH_MSG_INFO( Detector.PrintInfo() );
505  ATH_MSG_INFO( Layer.PrintInfo() );
506  ATH_MSG_INFO( Module.PrintInfo() );
507  ATH_MSG_INFO( Board.PrintInfo() );
508  ATH_MSG_INFO( Chip.PrintInfo() );
509  ATH_MSG_INFO( Straw.PrintInfo() );
510  ATH_MSG_INFO(" ");
511 
512  if (m_DoArXenonSep){
513  //print some info
514  ATH_MSG_INFO(" ");
515  ATH_MSG_INFO( "Setup for the ARGON Straws: " );
516  ATH_MSG_INFO( "INPUT FILE : " << infile );
517  ATH_MSG_INFO( "OUTPUT FILE : " << outfile );
518  ATH_MSG_INFO( "SELECTION STRING : " << m_selstring );
519  ATH_MSG_INFO( "OPTION STRING : " << m_options );
520  ATH_MSG_INFO( "RT RELATION : " << m_rtrel );
521  ATH_MSG_INFO( "MIN STATISTICS : RT=" << m_minrt << ", T0=" << m_mint0 );
522  ATH_MSG_INFO( "T0 OFFSET : " << m_t0offset );
523  ATH_MSG_INFO( " ");
524  ATH_MSG_INFO( TRT_Ar.PrintInfo() );
525  ATH_MSG_INFO( Detector_Ar.PrintInfo() );
526  ATH_MSG_INFO( Layer_Ar.PrintInfo() );
527  ATH_MSG_INFO( Module_Ar.PrintInfo() );
528  ATH_MSG_INFO( Board_Ar.PrintInfo() );
529  ATH_MSG_INFO( Chip_Ar.PrintInfo() );
530  ATH_MSG_INFO( Straw_Ar.PrintInfo() );
531  ATH_MSG_INFO(" ");
532  }
533  //read the chip reference t0 values from finedelays.txt
534  int rbrd, rchp, rdet, dum;
535  float rt0;
536  std::map<std::string,float> reft0map;
537  std::ifstream t0ref("finedelays.txt",std::ios::in);
538  if(t0ref.is_open()) ATH_MSG_INFO(" Opened finedelays.txt ");
539  for(int iref=0;iref<208;iref++){
540  t0ref >> rbrd >> rchp >> rdet >> dum >> rt0;
541  reft0map[std::string(Form("_%i_%i_%i",rdet,rbrd,rchp))]=rt0;
542  }
543 
544  t0ref.close();
545 
546 
547  //set type of rt-relation
548  bool isdines = m_rtrel.find("dines")!=std::string::npos;
549  bool isbinned = m_rtrel.find("binned")!=std::string::npos;
550  int rtint;
551  if (isdines) rtint=2;
552  else if (isbinned) rtint=1;
553  else rtint=0;
554  ATH_MSG_INFO(" Rt relation is: " << rtint);
555 
556  int npop,isid;
557  std::map<std::string,epdata> ephasemap;
558 
559  // open the output histogram file
560  std::unique_ptr<TFile> histfile(TFile::Open("calibout.root","RECREATE"));
561 
562  if(!histfile || histfile->IsZombie()) {
563  ATH_MSG_ERROR ("Failed to open calibout.root ");
564  return false;
565  } else {
566  ATH_MSG_INFO ("Opened calibout.root ");
567  }
568 
569  std::ifstream myFile (infile.data(), std::ios::in | std::ios::binary);
570  ATH_MSG_INFO( " Opened " << infile << " as binary histogram file " );
571  int ihist=0;
572  int ihistAr=0;
573 
574  while(true){
575 
576  //read a binary histogram
577  myFile.read ((char*)&npop,sizeof(int)); //number of populated bins
578  if (myFile.eof()) break;
579  int* chist=new int[2*npop+2]; //the histogram
580  if (npop>0) myFile.read ((char*)(chist+2), sizeof(int)*2*npop);
581  myFile.read ((char*)&isid,sizeof(int)); //the straw id
582  sid = (float)isid;
583  if(sid<0) continue;
584 
585  chist[0]=npop;
586  chist[1]=isid;
587  //get the straw address (barrel/ec, layer, module, ...) based on the straw identifier
588  ident=(Identifier)(isid);
589  int chip=0,board=-1;
590  m_neighbourSvc->getChip(ident,chip);
591  if(abs(m_TRTID->barrel_ec(ident))<2){
592  board=m_neighbourSvc->chipToBoardBarrel(chip,m_TRTID->layer_or_wheel(ident));
593  }
594  else if (chip<12) {
595  board=0;
596  }
597  else {
598  chip=chip-20;
599  board=1;
600  }
601  if (m_SplitBarrel) hitdata.det=(int)m_TRTID->barrel_ec(ident);
602  else hitdata.det=abs((int)m_TRTID->barrel_ec(ident));
603  if(hitdata.det!=1 && hitdata.det!=-1 && hitdata.det!=2 && hitdata.det!=-2) {
604  ATH_MSG_WARNING( " Invalid Identifier read : " << ident << " detector decoded to be : " << hitdata.det);
605  continue;
606  }
607  hitdata.lay=(int)m_TRTID->layer_or_wheel(ident);
608  if( (hitdata.det==1 || hitdata.det==-1) && (hitdata.lay<0 || hitdata.lay>2) ) {
609  ATH_MSG_WARNING( " Invalid Identifier read : " << ident << " barrel layer decoded to be : " << hitdata.lay);
610  continue;
611  } else if( (hitdata.det==2 || hitdata.det==-2) && (hitdata.lay<0 || hitdata.lay>13) ) {
612  ATH_MSG_WARNING( " Invalid Identifier read : " << ident << " endcap layer decoded to be : " << hitdata.lay);
613  continue;
614  }
615  hitdata.mod=(int)m_TRTID->phi_module(ident);
616  if( hitdata.mod < 0 || hitdata.mod > 31 ) {
617  ATH_MSG_WARNING( " Invalid Identifier read : " << ident << " phi-module decoded to be : " << hitdata.lay);
618  continue;
619  }
620 
621  hitdata.brd=board;
622  hitdata.chp=chip;
623  hitdata.stl=(int)m_TRTID->straw_layer(ident);
624  if( hitdata.stl < 0 || hitdata.stl > m_TRTID->straw_layer_max(ident) ) {
625  ATH_MSG_WARNING( " Invalid Identifier read : " << ident << " straw-layer decoded to be : " << hitdata.stl);
626  continue;
627  }
628 
629  hitdata.stw=(int)m_TRTID->straw(ident);
630  if( hitdata.stw < 0 || hitdata.stw > m_TRTID->straw_max(ident) ) {
631  ATH_MSG_WARNING( " Invalid Identifier read : " << ident << " straw decoded to be : " << hitdata.stw);
632  continue;
633  }
634 
635  hitdata.sid=isid;
636 
637  //get the old rt parameters based on straw identifier
638  const float* pcal ;
639  std::vector<float> rvalues ;
640  const float defaultpcal[] = {0,0,0,0} ;
641  if (isdines){
642  const TRTCond::DinesRtRelation* rtr = dynamic_cast<const TRTCond::DinesRtRelation*>(m_trtcaldbTool->getRtRelation(ident)) ;
643  pcal = rtr ? rtr->cal() : defaultpcal ;
644  }
645 
646  else {
647  const TRTCond::BasicRtRelation* rtr = dynamic_cast<const TRTCond::BasicRtRelation*>(m_trtcaldbTool->getRtRelation(ident)) ;
648  pcal = rtr ? rtr->cal() : defaultpcal ;
649  }
650  hitdata.rtpar[0]=pcal[0];
651  hitdata.rtpar[1]=pcal[1];
652  hitdata.rtpar[2]=pcal[2];
653  hitdata.rtpar[3]=pcal[3];
654 
655 
656  //build map keys
657  MakeBDKeys(hitdata.det, hitdata.lay, hitdata.mod, hitdata.brd, hitdata.chp, hitdata.sid);
658 
659  //make the level hierachy dictionaries
660  m_trt.t[m_Tkey].d[m_Dkey].l[m_Lkey].m[m_Mkey].b[m_Bkey].c[m_Ckey].s[m_Skey].z=0;
661  m_trt_acc.t[m_Tkey].d[m_Dkey_acc].l[m_Lkey_acc].m[m_Mkey].b[m_Bkey].c[m_Ckey].s[m_Skey].z=0;
662 
663  //populate the hit data structure to be added
664 
665 
666  hitdata.ievt=0;
667  hitdata.tres=0;
668  hitdata.weight=1.0;
669  hitdata.res=0;
670  hitdata.t=0;
671  hitdata.r=0;
672  hitdata.t0=m_trtcaldbTool->getT0(ident);
673 
674  strawelement = m_trtmanager->getElement(ident);
675  if(hitdata.det==1 || hitdata.det==-1) {
676  barrelelement=(InDetDD::TRT_BarrelElement*)strawelement;
677  hitdata.x=(barrelelement->center(ident)).x();
678  hitdata.y=(barrelelement->center(ident)).y();
679  hitdata.z=(barrelelement->center(ident)).z();
680  }else{
681  endcapelement=(InDetDD::TRT_EndcapElement*)strawelement;
682  hitdata.x=(endcapelement->center(ident)).x();
683  hitdata.y=(endcapelement->center(ident)).y();
684  hitdata.z=(endcapelement->center(ident)).z();
685  }
686 
687  //in the short straws corrections, autodetect if it was applied on the previous step
688  if ( m_DoShortStrawCorrection && hitdata.lay==0 && hitdata.stl<9){
689  //If correction was done in ctes in db (readed), undo the correction: This fixes problem on t0 averaging....
690  double t0test1=m_trtcaldbTool->getT0((Identifier)301998432);
691  double t0test2=m_trtcaldbTool->getT0((Identifier)302001504);
692  if (t0test1 != t0test2) hitdata.t0+=0.75; //short straw compensation
693  }
694 
695  //the reference t0 from finedelays
696  hitdata.rt0=reft0map[std::string(Form("_%i_%i_%i",hitdata.det,hitdata.brd,hitdata.chp))];
697 
698  // Prepare for Xe-Ar mixed conditions:
699  int isArgonStraw = 0;
700  if (m_TRTStrawSummaryTool->getStatusHT(ident) != TRTCond::StrawStatus::Good) {
701  isArgonStraw = 1;
702  }
703 
704 
705  //add histogram to the Calibrators (A and C side separated)
706  if(!m_DoArXenonSep){
707 
708  nTRThist += TRT.AddHit(m_Tkey,hitdata,chist,true);
709  if (Detector.CheckSelection(hitdata.det)) { //only add the histogram if it is in the selection
710  if (m_SplitBarrel) ndethist += Detector.AddHit(m_Dkey,hitdata,chist,true);
711  else ndethist += Detector.AddHit(m_Dkey_acc,hitdata,chist,true);
712  if (Layer.CheckSelection(hitdata.lay)) {
713  if (m_SplitBarrel) nlayhist += Layer.AddHit(m_Lkey,hitdata,chist,true);
714  else { nlayhist += Layer.AddHit(m_Lkey_acc,hitdata,chist,true); continue;}
715  if (Module.CheckSelection(hitdata.mod)) {
716  nmodhist += Module.AddHit(m_Mkey,hitdata,chist,true);
717  if (Board.CheckSelection(hitdata.brd)) {
718  nbrdhist += Board.AddHit(m_Bkey,hitdata,chist,true);
719  if (Chip.CheckSelection(hitdata.chp)) {
720  nchphist += Chip.AddHit(m_Ckey,hitdata,chist,true);
721  if (Straw.CheckSelection(hitdata.stw))
722  nstwhist += Straw.AddHit(m_Skey,hitdata,chist,true);
723  }
724  }
725  }
726  }
727  } // Here it closes
728  ihist++;
729  } else
730  if(isArgonStraw==0){ // Separate Ar and Xe in endcaps. Here Xe
731  nTRThist += TRT.AddHit(m_Tkey,hitdata,chist,true);
732  if (Detector.CheckSelection(hitdata.det)) { //only add the histogram if it is in the selection
733  if (m_SplitBarrel) ndethist += Detector.AddHit(m_Dkey,hitdata,chist,true);
734  else ndethist += Detector.AddHit(m_Dkey_acc,hitdata,chist,true);
735  if (Layer.CheckSelection(hitdata.lay)) {
736  if (m_SplitBarrel) nlayhist += Layer.AddHit(m_Lkey,hitdata,chist,true);
737  else { nlayhist += Layer.AddHit(m_Lkey_acc,hitdata,chist,true); continue;}
738  if (Module.CheckSelection(hitdata.mod)) {
739  nmodhist += Module.AddHit(m_Mkey,hitdata,chist,true);
740  if (Board.CheckSelection(hitdata.brd)) {
741  nbrdhist += Board.AddHit(m_Bkey,hitdata,chist,true);
742  if (Chip.CheckSelection(hitdata.chp)) {
743  nchphist += Chip.AddHit(m_Ckey,hitdata,chist,true);
744  if (Straw.CheckSelection(hitdata.stw)) {
745  nstwhist += Straw.AddHit(m_Skey,hitdata,chist,true);
746  }
747  }
748  }
749  }
750  }
751  } // Here it closes
752  ihist++;
753  } else { // ARGON HITS
754  nTRThistAr += TRT_Ar.AddHit(m_Tkey,hitdata,chist,true);
755  if (Detector_Ar.CheckSelection(hitdata.det)) { //only add the histogram if it is in the selection
756  if (m_SplitBarrel) ndethistAr += Detector_Ar.AddHit(m_Dkey,hitdata,chist,true);
757  else ndethistAr += Detector_Ar.AddHit(m_Dkey_acc,hitdata,chist,true);
758  if (Layer_Ar.CheckSelection(hitdata.lay)) {
759  if (m_SplitBarrel) nlayhistAr += Layer_Ar.AddHit(m_Lkey,hitdata,chist,true);
760  else { nlayhistAr += Layer_Ar.AddHit(m_Lkey_acc,hitdata,chist,true); continue;}
761  if (Module_Ar.CheckSelection(hitdata.mod)) {
762  nmodhistAr += Module_Ar.AddHit(m_Mkey,hitdata,chist,true);
763  if (Board_Ar.CheckSelection(hitdata.brd)) {
764  nbrdhistAr += Board_Ar.AddHit(m_Bkey,hitdata,chist,true);
765  if (Chip_Ar.CheckSelection(hitdata.chp)) {
766  nchphistAr += Chip_Ar.AddHit(m_Ckey,hitdata,chist,true);
767  if (Straw_Ar.CheckSelection(hitdata.stw)) {
768  nstwhistAr += Straw_Ar.AddHit(m_Skey,hitdata,chist,true);
769  }
770  }
771  }
772  }
773  }
774  } // Here it closes
775  ihistAr++;
776  } // END ARGON HITS
777 
778 
779  if ((ihist%10000==9999) | (ihist==m_nevents-1)){
780  ATH_MSG_INFO( Form("%7i HISTOGRAMS READ, UNITS ADDED: %i %i %2i %3i %3i %4i %6i",ihist+1,nTRThist, ndethist, nlayhist, nmodhist, nbrdhist, nchphist, nstwhist) );
781  if(m_DoArXenonSep) ATH_MSG_INFO( Form("%7i Ar HISTOGRAMS READ, UNITS ADDED: %i %i %2i %3i %3i %4i %6i",ihistAr+1,nTRThistAr, ndethistAr, nlayhistAr, nmodhistAr, nbrdhistAr, nchphistAr, nstwhistAr) );
782  }
783 
784  ihist++;
785  delete [] chist;
786  } // Finish Straw Loop
787 
788  ATH_MSG_INFO( Form("%7i HISTOGRAMS READ, UNITS ADDED: %i %i %2i %3i %3i %4i %6i",ihist+1,nTRThist, ndethist, nlayhist, nmodhist, nbrdhist, nchphist, nstwhist) );
789  if(m_DoArXenonSep) ATH_MSG_INFO( Form("%7i Ar HISTOGRAMS READ, UNITS ADDED: %i %i %2i %3i %3i %4i %6i",ihistAr+1,nTRThistAr, ndethistAr, nlayhistAr, nmodhistAr, nbrdhistAr, nchphistAr, nstwhistAr) );
790 
791  TRT.UpdateOldConstants();
792  Detector.UpdateOldConstants();
793  Layer.UpdateOldConstants();
794  Module.UpdateOldConstants();
795  Board.UpdateOldConstants();
796  Chip.UpdateOldConstants();
797 
798  if (ihistAr>0 ){
799  TRT_Ar.UpdateOldConstants();
800  Detector_Ar.UpdateOldConstants();
801  Layer_Ar.UpdateOldConstants();
802  Module_Ar.UpdateOldConstants();
803  Board_Ar.UpdateOldConstants();
804  Chip_Ar.UpdateOldConstants();
805  }
806 
807  myFile.close();
808 
809 
810  ATH_MSG_INFO(" ");
811  ATH_MSG_INFO( TRT.PrintStat() );
812  ATH_MSG_INFO( Detector.PrintStat() );
813  ATH_MSG_INFO( Layer.PrintStat() );
814  ATH_MSG_INFO( Module.PrintStat() );
815  ATH_MSG_INFO( Board.PrintStat() );
816  ATH_MSG_INFO( Chip.PrintStat() );
817  ATH_MSG_INFO( Straw.PrintStat() );
818  ATH_MSG_INFO(" ");
819 
820 
821  if(m_DoArXenonSep){
822  ATH_MSG_INFO(" ");
823  ATH_MSG_INFO( TRT_Ar.PrintStat() );
824  ATH_MSG_INFO( Detector_Ar.PrintStat() );
825  ATH_MSG_INFO( Layer_Ar.PrintStat() );
826  ATH_MSG_INFO( Module_Ar.PrintStat() );
827  ATH_MSG_INFO( Board_Ar.PrintStat() );
828  ATH_MSG_INFO( Chip_Ar.PrintStat() );
829  ATH_MSG_INFO( Straw_Ar.PrintStat() );
830  ATH_MSG_INFO(" ");
831  }
832 
833 
834 
835  //caldata startdata(true,tbins,rbins);
836  caldata startdata(true,55,100);
837  //caldata startdata(true,64,64);
838  startdata.t0=5.0;
839  std::map<std::string,TDirectory*> dirmap;
840  TDirectory* trtdir=gDirectory;
841  TDirectory* detdir=gDirectory;
842  TDirectory* laydir=gDirectory;
843  TDirectory* moddir=gDirectory;
844  TDirectory* brddir=gDirectory;
845  TDirectory* chpdir=gDirectory;
846 
847  std::ofstream rtcalfile(Form("%s_rt.txt",outfile.data()),std::ios::out);
848  std::ofstream binrtcalfile(Form("%s_binrt.txt",outfile.data()),std::ios::out);
849  std::ofstream t0calfile(Form("%s_t0.txt",outfile.data()),std::ios::out);
850 
851 
852  //if (m_SplitBarrel){
853 
854  for (std::pair<const std::string, BDdetector>& pt : m_trt.t) {
855 
856  if (TRT.Skip()) break;
857  if (TRT.HasKey(pt.first)) {
858  trtdir = TRT.Calibrate(histfile.get(),pt.first,SubLev(m_options,1),&startdata);
859  if (TRT.printt0) t0calfile << Form("-3 -1 -1 -1 -1 : %e %e",TRT.data[pt.first].t0,TRT.data[pt.first].t0err) << std::endl;
860  if (TRT.printrt) rtcalfile << Form("-3 -1 -1 -1 -1 : %i %e %e %e %e",rtint,TRT.data[pt.first].rtpar[0],TRT.data[pt.first].rtpar[1],TRT.data[pt.first].rtpar[2],TRT.data[pt.first].rtpar[3]) << std::endl;
861  }
862  for (std::pair<const std::string, BDlayer>& pd : pt.second.d) {
863 
864  if(Detector.Skip()) break;
865  if(Detector.HasKey(pd.first)){
866  detdir = Detector.Calibrate(trtdir,pd.first,SubLev(m_options,2),&TRT.data[pt.first]);
867  }
868  for (std::pair<const std::string, BDmodule>& pl : pd.second.l) {
869 
870  if(Layer.Skip()) break;
871  if(Layer.HasKey(pl.first)){
872  laydir = Layer.Calibrate(detdir,pl.first,SubLev(m_options,3),&Detector.data[pd.first]);
873  if (Layer.printt0) t0calfile << Form("%i %i -1 -1 -1 : %e %e",Layer.data[pl.first].det,Layer.data[pl.first].lay,Layer.data[pl.first].t0,Layer.data[pl.first].t0err) << std::endl;
874  if (Layer.printrt) rtcalfile << Form("%i %i -1 -1 -1 : %i %e %e %e %e",Layer.data[pl.first].det,Layer.data[pl.first].lay,rtint,Layer.data[pl.first].rtpar[0],Layer.data[pl.first].rtpar[1],Layer.data[pl.first].rtpar[2],Layer.data[pl.first].rtpar[3]) << std::endl;
875  if (!m_SplitBarrel) {
876  if (Layer.printt0) t0calfile << Form("%i %i -1 -1 -1 : %e %e",-Layer.data[pl.first].det,Layer.data[pl.first].lay,Layer.data[pl.first].t0,Layer.data[pl.first].t0err) << std::endl;
877  if (Layer.printrt) rtcalfile << Form("%i %i -1 -1 -1 : %i %e %e %e %e",-Layer.data[pl.first].det,Layer.data[pl.first].lay,rtint,Layer.data[pl.first].rtpar[0],Layer.data[pl.first].rtpar[1],Layer.data[pl.first].rtpar[2],Layer.data[pl.first].rtpar[3]) << std::endl;
878  }
879  }
880  for (std::pair<const std::string, BDboard>& pm : pl.second.m) {
881 
882  if(Module.Skip()) break;
883  if(Module.HasKey(pm.first)){
884  moddir = Module.Calibrate(laydir,pm.first,SubLev(m_options,4),&Layer.data[pl.first]);
885  if (Module.printt0) t0calfile << Form("%i %i %i -1 -1 : %e %e",Module.data[pm.first].det,Module.data[pm.first].lay,Module.data[pm.first].mod,Module.data[pm.first].t0,Module.data[pm.first].t0err) << std::endl;
886  if (Module.printrt) rtcalfile << Form("%i %i %i -1 -1 : %i %e %e %e %e",Module.data[pm.first].det,Module.data[pm.first].lay,Module.data[pm.first].mod,rtint,Module.data[pm.first].rtpar[0],Module.data[pm.first].rtpar[1],Module.data[pm.first].rtpar[2],Module.data[pm.first].rtpar[3]) << std::endl;
887  }
888  for (std::pair<const std::string, BDchip>& pb : pm.second.b) {
889 
890  if(Board.Skip()) break;
891  if(Board.HasKey(pb.first)){
892  brddir = Board.Calibrate(moddir,pb.first,SubLev(m_options,5),&Module.data[pm.first]);
893  }
894  for (std::pair<const std::string, BDstraw>& pc : pb.second.c) {
895 
896  if(Chip.Skip()) break;
897  if(Chip.HasKey(pc.first)){
898  chpdir = Chip.Calibrate(brddir,pc.first,SubLev(m_options,6),&Board.data[pb.first]);
899  }
900  for (std::pair<const std::string, BDzero>& ps : pc.second.s) {
901 
902  if(Straw.Skip()) break;
903  if(Straw.HasKey(ps.first)){
904  Straw.Calibrate(chpdir,ps.first,SubLev(m_options,7),&Chip.data[pc.first]);
905  if (Straw.printt0) t0calfile << Form("%i %i %i %i %i : %e %e",Straw.data[ps.first].det,Straw.data[ps.first].lay,Straw.data[ps.first].mod,Straw.data[ps.first].stl,Straw.data[ps.first].stw,Straw.data[ps.first].t0,Straw.data[ps.first].t0err) << std::endl;
906  if (Straw.printrt) rtcalfile << Form("%i %i %i %i %i : %i %e %e %e %e",Straw.data[ps.first].det,Straw.data[ps.first].lay,Straw.data[ps.first].mod,Straw.data[ps.first].stl,Straw.data[ps.first].stw,rtint,Straw.data[ps.first].rtpar[0],Straw.data[ps.first].rtpar[1],Straw.data[ps.first].rtpar[2],Straw.data[ps.first].rtpar[3]) << std::endl;
907 
908 
909  }
910  }
911  }
912  }
913  }
914  }
915  }
916  }
917 
918  std::map<std::string,TDirectory*> dirArmap;
919  TDirectory* trtdirAr=gDirectory;
920  TDirectory* detdirAr=gDirectory;
921  TDirectory* laydirAr=gDirectory;
922  TDirectory* moddirAr=gDirectory;
923  TDirectory* brddirAr=gDirectory;
924  TDirectory* chpdirAr=gDirectory;
925 
926  if (m_DoArXenonSep){
927 
928  for (std::pair<const std::string, BDdetector>& pt : m_trt.t) {
929 
930  if (TRT_Ar.Skip()) break;
931  if (TRT_Ar.HasKey(pt.first)) {
932  trtdirAr = TRT_Ar.Calibrate(histfile.get(),pt.first,SubLev(m_options,1),&startdata);
933  }
934  for (std::pair<const std::string, BDlayer>& pd : pt.second.d) {
935 
936  if(Detector_Ar.Skip()) break;
937  if(Detector_Ar.HasKey(pd.first)){
938  detdirAr = Detector_Ar.Calibrate(trtdirAr,pd.first,SubLev(m_options,2),&TRT_Ar.data[pt.first]);
939  }
940  for (std::pair<const std::string, BDmodule>& pl : pd.second.l) {
941 
942  if(Layer_Ar.Skip()) break;
943  if(Layer_Ar.HasKey(pl.first)){
944  laydirAr = Layer_Ar.Calibrate(detdirAr,pl.first,SubLev(m_options,3),&Detector_Ar.data[pd.first]);
945 
946  }
947  for (std::pair<const std::string, BDboard>& pm : pl.second.m) {
948 
949  if(Module_Ar.Skip()) break;
950  if(Module_Ar.HasKey(pm.first)){
951  moddirAr = Module_Ar.Calibrate(laydirAr,pm.first,SubLev(m_options,4),&Layer_Ar.data[pl.first]);
952  if (Module_Ar.printt0) t0calfile << Form("%i %i %i -1 -1 : %e %e",Module_Ar.data[pm.first].det,Module_Ar.data[pm.first].lay,Module_Ar.data[pm.first].mod,Module_Ar.data[pm.first].t0,Module_Ar.data[pm.first].t0err) << std::endl;
953  if (Layer_Ar.printrt) rtcalfile << Form("%i %i %i -1 -1 : %i %e %e %e %e",Module_Ar.data[pm.first].det,Module_Ar.data[pm.first].lay,Module_Ar.data[pm.first].mod,rtint,Module_Ar.data[pm.first].rtpar[0],Module_Ar.data[pm.first].rtpar[1],Module_Ar.data[pm.first].rtpar[2],Module_Ar.data[pm.first].rtpar[3]) << std::endl;
954  }
955  for (std::pair<const std::string, BDchip>& pb : pm.second.b) {
956  if(Board_Ar.Skip()) break;
957  if(Board_Ar.HasKey(pb.first)){
958  brddirAr = Board_Ar.Calibrate(moddirAr,pb.first,SubLev(m_options,5),&Module_Ar.data[pm.first]);
959  }
960  for (std::pair<const std::string, BDstraw>& pc : pb.second.c) {
961 
962  if(Chip_Ar.Skip()) break;
963  if(Chip_Ar.HasKey(pc.first)){
964  chpdirAr = Chip_Ar.Calibrate(brddirAr,pc.first,SubLev(m_options,6),&Board_Ar.data[pb.first]);
965  }
966  for (std::pair<const std::string, BDzero>& ps : pc.second.s) {
967 
968  if(Straw_Ar.Skip()) break;
969  if(Straw_Ar.HasKey(ps.first)){
970  Straw_Ar.Calibrate(chpdirAr,ps.first,SubLev(m_options,7),&Chip_Ar.data[pc.first]);
971  if (Straw_Ar.printt0) t0calfile << Form("%i %i %i %i %i : %e %e",Straw_Ar.data[ps.first].det,Straw_Ar.data[ps.first].lay,Straw_Ar.data[ps.first].mod,Straw_Ar.data[ps.first].stl,Straw_Ar.data[ps.first].stw,Straw_Ar.data[ps.first].t0,Straw_Ar.data[ps.first].t0err) << std::endl;
972  if (Straw_Ar.printrt) rtcalfile << Form("%i %i %i %i %i : %i %e %e %e %e",Straw_Ar.data[ps.first].det,Straw_Ar.data[ps.first].lay,Straw_Ar.data[ps.first].mod,Straw_Ar.data[ps.first].stl,Straw_Ar.data[ps.first].stw,rtint,Straw_Ar.data[ps.first].rtpar[0],Straw_Ar.data[ps.first].rtpar[1],Straw_Ar.data[ps.first].rtpar[2],Straw_Ar.data[ps.first].rtpar[3]) << std::endl;
973  }
974  }
975  }
976  }
977  }
978  }
979  }
980  }
981 
982 }// Close for ARGON
983 
984 
985 
986 
987  //make ntuples for each calibrator
988  if (!TRT.bequiet) TRT.WriteStat(histfile.get());
989  if (!Detector.bequiet) Detector.WriteStat(histfile.get());
990  if (!Layer.bequiet) Layer.WriteStat(histfile.get());
991  if (!Module.bequiet) Module.WriteStat(histfile.get());
992  if (!Board.bequiet) Board.WriteStat(histfile.get());
993  Chip.WriteStat(histfile.get());
994  Straw.WriteStat(histfile.get());
995 
996  TRT.DumpConstants();
997  Detector.DumpConstants();
998  Layer.DumpConstants();
999  Module.DumpConstants();
1000  Board.DumpConstants();
1001  Chip.DumpConstants();
1002  Straw.DumpConstants();
1003 
1004  rtcalfile.close();
1005  binrtcalfile.close();
1006  t0calfile.close();
1007 
1008  //AR
1009  //make ntuples for each calibrator
1010  if(m_DoArXenonSep){
1011  if (!TRT_Ar.bequiet) TRT_Ar.WriteStat(histfile.get());
1012  if (!Detector_Ar.bequiet) Detector_Ar.WriteStat(histfile.get());
1013  if (!Layer_Ar.bequiet) Layer_Ar.WriteStat(histfile.get());
1014  if (!Module_Ar.bequiet) Module_Ar.WriteStat(histfile.get());
1015  if (!Board_Ar.bequiet) Board_Ar.WriteStat(histfile.get());
1016  Chip_Ar.WriteStat(histfile.get());
1017  Straw_Ar.WriteStat(histfile.get());
1018 
1019  TRT_Ar.DumpConstants();
1020  Detector_Ar.DumpConstants();
1021  Layer_Ar.DumpConstants();
1022  Module_Ar.DumpConstants();
1023  Board_Ar.DumpConstants();
1024  Chip_Ar.DumpConstants();
1025  Straw_Ar.DumpConstants();
1026  }
1027 
1028  histfile->ls();
1029  ATH_MSG_INFO( "writing out calibout.root");
1030  histfile->Write();
1031 
1032  return true;
1033 
1034 }
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
TRTCond::DinesRtRelation
Definition: DinesRtRelation.h:26
databundle::det
int det
detector (barrel -1 or 1, or end-cap -2 or 2)
Definition: Calibrator.h:79
TRT
@ TRT
Definition: RegSelEnums.h:26
InDetDD::TRT_BarrelElement
Definition: TRT_BarrelElement.h:44
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
run.infile
string infile
Definition: run.py:13
keylayer_zslicemap.pb
pb
Definition: keylayer_zslicemap.py:188
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
Calibrator
A structure to contain data associated with the calibration of a certain sub-module.
Definition: Calibrator.h:178
test_pyathena.pt
pt
Definition: test_pyathena.py:11
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
caldata
A structure to contain data associated with the calibration of a certain sub-module.
Definition: Calibrator.h:104
databundle::lay
int lay
layer
Definition: Calibrator.h:80
InDetDD::TRT_EndcapElement
Definition: TRT_EndcapElement.h:44
databundle::brd
int brd
board
Definition: Calibrator.h:82
x
#define x
python.RingerConstants.Layer
Layer
Definition: RingerConstants.py:42
databundle::stw
int stw
straw number (within the strawlayer)
Definition: Calibrator.h:85
databundle::mod
int mod
phi module
Definition: Calibrator.h:81
TRTCond::DinesRtRelation::cal
const float * cal() const
return to calibration constants
Definition: DinesRtRelation.h:76
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
TRT
Definition: HitInfo.h:33
ParseInputs.gDirectory
gDirectory
Definition: Final2012/ParseInputs.py:133
z
#define z
TRTCond::BasicRtRelation
Definition: BasicRtRelation.h:26
databundle::x
float x
straw x position
Definition: Calibrator.h:96
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
databundle::res
float res
space residual
Definition: Calibrator.h:90
jet::CompCategory::Detector
@ Detector
Definition: UncertaintyEnum.h:19
databundle::ievt
int ievt
event number
Definition: Calibrator.h:87
databundle::weight
float weight
histogram weight (currently set to 1)
Definition: Calibrator.h:89
TRTCond::StrawStatus::Good
@ Good
Definition: StrawStatus.h:18
xAOD::Straw
@ Straw
Definition: TrackingPrimitives.h:557
databundle::rtpar
std::array< float, 4 > rtpar
rt-parameters used in the reconstruction
Definition: Calibrator.h:95
databundle
A structure to contain hit data.
Definition: Calibrator.h:77
TRT::Hit::ident
@ ident
Definition: HitInfo.h:77
databundle::chp
int chp
chip
Definition: Calibrator.h:83
PlotSFuncertainty.calib
calib
Definition: PlotSFuncertainty.py:110
databundle::z
float z
straw z position
Definition: Calibrator.h:98
databundle::rt0
float rt0
reference t0 (offset from board mean)
Definition: Calibrator.h:94
y
#define y
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
InDetDD::TRT_BaseElement::center
virtual const Amg::Vector3D & center() const override final
Element Surface: center of a straw layer.
databundle::stl
int stl
straw-layer
Definition: Calibrator.h:84
databundle::r
float r
drift radius from r(t) relation
Definition: Calibrator.h:92
databundle::sid
int sid
straw ID
Definition: Calibrator.h:86
TRTCond::BasicRtRelation::cal
const float * cal() const
return to calibration constants
Definition: BasicRtRelation.h:76
databundle::tres
float tres
time residual
Definition: Calibrator.h:88
databundle::t0
float t0
t0 value used in reconstruction
Definition: Calibrator.h:93
PrepareReferenceFile.outfile
outfile
Definition: PrepareReferenceFile.py:42
module_driven_slicing.histfile
histfile
Definition: module_driven_slicing.py:571
readCCLHist.float
float
Definition: readCCLHist.py:83
databundle::y
float y
straw y position
Definition: Calibrator.h:97
python.SystemOfUnits.pc
float pc
Definition: SystemOfUnits.py:99
extractSporadic.myFile
myFile
Definition: extractSporadic.py:87
InDetDD::TRT_BaseElement
Definition: TRT_BaseElement.h:57
databundle::t
float t
raw time
Definition: Calibrator.h:91