CMS 3D CMS Logo

List of all members | Public Member Functions | Public Attributes
hcalCalib Class Reference

#include <hcalCalib.h>

Inheritance diagram for hcalCalib:

Public Member Functions

void Begin (TTree *tree) override
 
void GetCoefFromMtrxInvOfAve ()
 
Int_t GetEntry (Long64_t entry, Int_t getall=0) override
 
TList * GetOutputList () const override
 
 hcalCalib (TTree *=0)
 
void Init (TTree *tree) override
 
void makeTextFile ()
 
Bool_t Notify () override
 
Bool_t Process (Long64_t entry) override
 
Bool_t ReadPhiSymCor ()
 
void SetApplyPhiSymCorFlag (Bool_t b)
 
void SetCalibAbsIEtaMax (Int_t i)
 
void SetCalibAbsIEtaMin (Int_t i)
 
void SetCalibMethod (const TString &s)
 
void SetCalibType (const TString &s)
 
void SetCaloGeometry (const CaloGeometry *g, const HcalTopology *topo)
 
void SetCombinePhiFlag (Bool_t b)
 
void SetConeMaxDist (Float_t d)
 
void SetHbClusterSize (Int_t i)
 
void SetHeClusterSize (Int_t i)
 
void SetHistoFileName (const TString &filename)
 
void SetInputList (TList *input) override
 
void SetMaxEOverP (Float_t e)
 
void SetMaxEtThirdJet (Float_t et)
 
void SetMaxProbeJetEmFrac (Float_t f)
 
void SetMaxTagJetAbsEta (Float_t e)
 
void SetMaxTagJetEmFrac (Float_t f)
 
void SetMaxTargetE (Float_t e)
 
void SetMaxTrkEmE (Float_t e)
 
void SetMinCellE (Float_t e)
 
void SetMinDPhiDiJets (Float_t dphi)
 
void SetMinEOverP (Float_t e)
 
void SetMinProbeJetAbsEta (Float_t e)
 
void SetMinTagJetEt (Float_t e)
 
void SetMinTargetE (Float_t e)
 
void SetObject (TObject *obj) override
 
void SetOption (const char *option) override
 
void SetOutputCorCoefFileName (const TString &filename)
 
void SetPhiSymCorFileName (const TString &filename)
 
void SetSumDepthsFlag (Bool_t b)
 
void SetSumSmallDepthsFlag (Bool_t b)
 
void SetUseConeClustering (Bool_t b)
 
void Terminate () override
 
Int_t Version () const override
 
 ~hcalCalib () override
 

Public Attributes

Bool_t APPLY_PHI_SYM_COR_FLAG
 
TBranch * b_cells
 
TBranch * b_emEnergy
 
TBranch * b_etVetoJet
 
TBranch * b_eventNumber
 
TBranch * b_iEtaHit
 
TBranch * b_iPhiHit
 
TBranch * b_probeJetEmFrac
 
TBranch * b_probeJetP4
 
TBranch * b_runNumber
 
TBranch * b_tagJetEmFrac
 
TBranch * b_tagJetP4
 
TBranch * b_targetE
 
TBranch * b_xTrkEcal
 
TBranch * b_xTrkHcal
 
TBranch * b_yTrkEcal
 
TBranch * b_yTrkHcal
 
TBranch * b_zTrkEcal
 
TBranch * b_zTrkHcal
 
Int_t CALIB_ABS_IETA_MAX
 
Int_t CALIB_ABS_IETA_MIN
 
TString CALIB_METHOD
 
TString CALIB_TYPE
 
std::vector< std::vector< Float_t > > cellEnergies
 
std::vector< std::vector< UInt_t > > cellIds
 
TClonesArray * cells
 
Bool_t COMBINE_PHI
 
Float_t emEnergy
 
Float_t etVetoJet
 
UInt_t eventNumber
 pointer to the analyzed TTree or TChain More...
 
TTree * fChain
 
Int_t HB_CLUSTER_SIZE
 
Int_t HE_CLUSTER_SIZE
 
TString HISTO_FILENAME
 
std::map< Int_t, Float_t > iEtaCoefMap
 
Int_t iEtaHit
 
UInt_t iPhiHit
 
Float_t MAX_CONE_DIST
 
Float_t MAX_EOVERP
 
Float_t MAX_ET_THIRD_JET
 
Float_t MAX_PROBEJET_EMFRAC
 
Float_t MAX_TAGJET_ABSETA
 
Float_t MAX_TAGJET_EMFRAC
 
Float_t MAX_TARGET_E
 
Float_t MAX_TRK_EME
 
Float_t MIN_CELL_E
 
Float_t MIN_DPHI_DIJETS
 
Float_t MIN_EOVERP
 
Float_t MIN_PROBEJET_ABSETA
 
Float_t MIN_TAGJET_ET
 
Float_t MIN_TARGET_E
 
TString OUTPUT_COR_COEF_FILENAME
 
TString PHI_SYM_COR_FILENAME
 
std::map< UInt_t, Float_t > phiSymCor
 
Float_t probeJetEmFrac
 
TLorentzVector * probeJetP4
 
std::vector< std::pair< Int_t, UInt_t > > refIEtaIPhi
 
UInt_t runNumber
 
std::map< UInt_t, Float_t > solution
 
Bool_t SUM_DEPTHS
 
Bool_t SUM_SMALL_DEPTHS
 
Float_t tagJetEmFrac
 
TLorentzVector * tagJetP4
 
Float_t targetE
 
std::vector< Float_t > targetEnergies
 
const CaloGeometrytheCaloGeometry
 
const HcalTopologytopo_
 
Bool_t USE_CONE_CLUSTERING
 
Float_t xTrkEcal
 
Float_t xTrkHcal
 
Float_t yTrkEcal
 
Float_t yTrkHcal
 
Float_t zTrkEcal
 
Float_t zTrkHcal
 

Detailed Description

Definition at line 38 of file hcalCalib.h.

Constructor & Destructor Documentation

hcalCalib::hcalCalib ( TTree *  = 0)
inline

Definition at line 87 of file hcalCalib.h.

87 {}
hcalCalib::~hcalCalib ( )
inlineoverride

Definition at line 88 of file hcalCalib.h.

88 {}

Member Function Documentation

void hcalCalib::Begin ( TTree *  tree)
override

Definition at line 67 of file hcalCalib.cc.

References gather_cfg::cout, cmsRelvalreport::exit, h1_allTrkP, h1_corResp, h1_corRespBarrel, h1_corRespEndcap, h1_corRespIEta, h1_numEventsTwrIEta, h1_rawResp, h1_rawRespBarrel, h1_rawRespEndcap, h1_rawSumE, h1_selTrkP_iEta10, h1_trkP, h2_dHitRefBarrel, h2_dHitRefEndcap, histoFile, mps_fire::i, nEvents, and TSGForRoadSearch_cfi::option.

Referenced by Version().

67  {
68  TString option = GetOption();
69 
70  nEvents = 0;
71 
73  cout << "\nERROR: Failed to read the phi symmetry corrections." << endl;
74  cout << "Check if the filename is correct. If the corrections are not needed, set the corresponding flag to "
75  "\"false\"\n"
76  << endl;
77 
78  cout << "\nThe program will be terminated\n" << endl;
79 
80  exit(1);
81  }
82 
83  // cellEnergies.reserve(1000000);
84  // cellIds.reserve(1000000);
85  // targetEnergies.reserve(1000000);
86 
87  histoFile = new TFile(HISTO_FILENAME.Data(), "RECREATE");
88 
89  h1_trkP = new TH1F("h1_trkP", "Track momenta; p_{trk} (GeV); Number of tracks", 100, 0, 200);
90  h1_allTrkP = new TH1F("h1_allTrkP", "Track momenta - all tracks; p_{trk} (GeV); Number of tracks", 100, 0, 200);
91 
92  h1_selTrkP_iEta10 = new TH1F(
93  "h1_selTrkP_iEta10", "Track momenta - tracks with |iEta|<10; p_{trk} (GeV); Number of tracks", 100, 0, 200);
94 
95  if (CALIB_TYPE == "ISO_TRACK")
96  h1_rawSumE = new TH1F("h1_rawSumE", "Cluster Energy; E_{cl} (GeV); Number of tracks", 100, 0, 200);
97  else
98  h1_rawSumE = new TH1F("h1_rawSumE", "Cluster Energy; E_{cl} (GeV); Number of tracks", 1000, 0, 2000);
99 
100  h1_rawResp = new TH1F("h1_rawResp", "Uncorrected response: |iEta|<24; E_{had}/p; Number of tracks", 300, 0, 3);
101  h1_corResp = new TH1F("h1_corResp", "Corrected response: |iEta|<24; E_{had}/p; Number of tracks", 300, 0, 3);
102 
104  new TH1F("h1_rawRespBarrel", "Uncorrected response: |iEta|<15; E_{had}/p; Number of tracks", 300, 0, 3);
106  new TH1F("h1_corRespBarrel", "Corrected response: |iEta|<15; E_{had}/p; Number of tracks", 300, 0, 3);
107 
109  new TH1F("h1_rawRespEndcap", "Uncorrected response: 17<|iEta|<24; E_{had}/p; Number of tracks", 300, 0, 3);
111  new TH1F("h1_corRespEndcap", "Corrected response: 17<|iEta|<24; E_{had}/p; Number of tracks", 300, 0, 3);
112 
113  h1_numEventsTwrIEta = new TH1F("h1_numEventsTwrIEta", "h1_numEventsTwrIEta", 80, -40, 40);
114 
115  h2_dHitRefBarrel = new TH2F("h2_dHitRefBarrel",
116  "{#Delta}i{#phi} vs {#Delta}i{#eta} of hit and most energetic "
117  "tower(|i{#eta}|<16);{#Delta}i{#eta}; {#Delta}i{#phi}",
118  10,
119  -5,
120  5,
121  10,
122  -5,
123  5);
124  h2_dHitRefEndcap = new TH2F("h2_dHitRefEndcap",
125  "{#Delta}i{#phi} vs {#Delta}i{#eta} of hit and most energetic tower (16<|i{#eta}|<25) "
126  ";{#Delta}i{#eta}; {#Delta}i{#phi}",
127  10,
128  -5,
129  5,
130  10,
131  -5,
132  5);
133 
134  TString histoName = "isoTrack_";
135 
136  for (Int_t i = 0; i < 48; ++i) {
137  Long_t iEta;
138  if (i < 24)
139  iEta = i - 24;
140  else
141  iEta = i - 23;
142  TString hn = histoName + iEta;
143  h1_corRespIEta[i] = new TH1F(hn, hn, 300, 0, 3.0);
144  }
145 
146 } // end of Begin()
TH1F * h1_corRespBarrel
Definition: hcalCalib.cc:55
TFile * histoFile
Definition: hcalCalib.cc:43
TH1F * h1_corRespIEta[48]
Definition: hcalCalib.cc:65
TH1F * h1_rawRespBarrel
Definition: hcalCalib.cc:54
TH2F * h2_dHitRefEndcap
Definition: hcalCalib.cc:61
TH2F * h2_dHitRefBarrel
Definition: hcalCalib.cc:60
TString CALIB_TYPE
Definition: hcalCalib.h:137
TH1F * h1_allTrkP
Definition: hcalCalib.cc:47
TH1F * h1_numEventsTwrIEta
Definition: hcalCalib.cc:58
TH1F * h1_rawSumE
Definition: hcalCalib.cc:51
TH1F * h1_selTrkP_iEta10
Definition: hcalCalib.cc:49
Bool_t APPLY_PHI_SYM_COR_FLAG
Definition: hcalCalib.h:141
TH1F * h1_corRespEndcap
Definition: hcalCalib.cc:57
TH1F * h1_rawResp
Definition: hcalCalib.cc:52
TH1F * h1_rawRespEndcap
Definition: hcalCalib.cc:56
TH1F * h1_trkP
Definition: hcalCalib.cc:46
TH1F * h1_corResp
Definition: hcalCalib.cc:53
Bool_t ReadPhiSymCor()
Definition: hcalCalib.cc:599
TString HISTO_FILENAME
Definition: hcalCalib.h:144
UInt_t nEvents
Definition: hcalCalib.cc:41
void hcalCalib::GetCoefFromMtrxInvOfAve ( )

Definition at line 511 of file hcalCalib.cc.

References patCaloMETCorrections_cff::A, funct::abs(), b, begin, end, spr::find(), mps_fire::i, HcalDetId::ieta(), and findQualityFiles::size.

Referenced by SetCaloGeometry().

511  {
512  // these maps are keyed by iEta
513  map<Int_t, Float_t> aveTargetE;
514  map<Int_t, Int_t> nEntries; // count hits
515 
516  // iEtaRef iEtaCell, energy
517  map<Int_t, map<Int_t, Float_t> > aveHitE; // add energies in the loop, normalize after that
518 
519  for (unsigned int i = 0; i < cellEnergies.size(); ++i) {
520  Int_t iEtaRef = refIEtaIPhi[i].first;
521  aveTargetE[iEtaRef] += targetEnergies[i];
522  nEntries[iEtaRef]++;
523 
524  // for hybrid method: matrix inv of averages preceeded by L3
525  if (CALIB_METHOD == "L3_AND_MTRX_INV") {
526  for (unsigned int j = 0; j < (cellEnergies[i]).size(); ++j) {
527  aveHitE[iEtaRef][HcalDetId(cellIds[i][j]).ieta()] += (solution[cellIds[i][j]] * cellEnergies[i][j]);
528  }
529  } else if (CALIB_METHOD == "MATRIX_INV_OF_ETA_AVE") {
530  for (unsigned int j = 0; j < (cellEnergies[i]).size(); ++j) {
531  aveHitE[iEtaRef][HcalDetId(cellIds[i][j]).ieta()] += cellEnergies[i][j];
532  }
533  }
534 
535  } // end of loop of entries
536 
537  // scale by number of entries to get the averages
538  Float_t norm = 1.0;
539  for (map<Int_t, Float_t>::iterator m_it = aveTargetE.begin(); m_it != aveTargetE.end(); ++m_it) {
540  Int_t iEta = m_it->first;
541  norm = (nEntries[iEta] > 0) ? 1.0 / (nEntries[iEta]) : 1.0;
542  aveTargetE[iEta] *= norm;
543 
544  map<Int_t, Float_t>::iterator n_it = (aveHitE[iEta]).begin();
545 
546  Float_t sumRawE = 0;
547  for (; n_it != (aveHitE[iEta]).end(); ++n_it) {
548  (n_it->second) *= norm;
549  sumRawE += (n_it->second);
550  }
551 
552  } // end of scaling by number of entries
553 
554  Int_t ONE_SIDE_IETA_RANGE = CALIB_ABS_IETA_MAX - CALIB_ABS_IETA_MIN + 1;
555 
556  // conversion from iEta to index for the linear system
557  // contains elements only in the valid range for *matrix inversion*
558  vector<Int_t> iEtaList;
559 
560  for (Int_t i = -CALIB_ABS_IETA_MAX; i <= CALIB_ABS_IETA_MAX; ++i) {
561  if (abs(i) < CALIB_ABS_IETA_MIN)
562  continue;
563  iEtaList.push_back(i);
564  }
565 
566  TMatrixD A(2 * ONE_SIDE_IETA_RANGE, 2 * ONE_SIDE_IETA_RANGE);
567  TMatrixD b(2 * ONE_SIDE_IETA_RANGE, 1);
568  TMatrixD x(2 * ONE_SIDE_IETA_RANGE, 1);
569 
570  for (Int_t i = 0; i < 2 * ONE_SIDE_IETA_RANGE; ++i) {
571  for (Int_t j = 0; j < 2 * ONE_SIDE_IETA_RANGE; ++j) {
572  A(i, j) = 0.0;
573  }
574  }
575 
576  for (UInt_t i = 0; i < iEtaList.size(); ++i) {
577  b(i, 0) = aveTargetE[iEtaList[i]];
578 
579  map<Int_t, Float_t>::iterator n_it = aveHitE[iEtaList[i]].begin();
580  for (; n_it != aveHitE[iEtaList[i]].end(); ++n_it) {
581  if (fabs(n_it->first) > CALIB_ABS_IETA_MAX || fabs(n_it->first) < CALIB_ABS_IETA_MIN)
582  continue;
583  Int_t j = Int_t(find(iEtaList.begin(), iEtaList.end(), n_it->first) - iEtaList.begin());
584  A(i, j) = n_it->second;
585  }
586  }
587 
588  TMatrixD coef = b;
589  TDecompQRH qrh(A);
590  Bool_t hasSolution = qrh.MultiSolve(coef);
591 
592  if (hasSolution && (CALIB_METHOD == "L3_AND_MTRX_INV" || CALIB_METHOD == "MATRIX_INV_OF_ETA_AVE")) {
593  for (UInt_t i = 0; i < iEtaList.size(); ++i) {
594  iEtaCoefMap[iEtaList[i]] = coef(i, 0);
595  }
596  }
597 }
std::vector< std::pair< Int_t, UInt_t > > refIEtaIPhi
Definition: hcalCalib.h:194
size
Write out results.
std::vector< Float_t > targetEnergies
Definition: hcalCalib.h:195
std::map< Int_t, Float_t > iEtaCoefMap
Definition: hcalCalib.h:201
std::vector< std::vector< UInt_t > > cellIds
Definition: hcalCalib.h:193
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:20
Int_t CALIB_ABS_IETA_MIN
Definition: hcalCalib.h:128
int ieta() const
get the cell ieta
Definition: HcalDetId.h:159
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
#define end
Definition: vmac.h:39
std::map< UInt_t, Float_t > solution
Definition: hcalCalib.h:199
std::vector< std::vector< Float_t > > cellEnergies
Definition: hcalCalib.h:192
TString CALIB_METHOD
Definition: hcalCalib.h:138
double b
Definition: hdecay.h:120
Int_t CALIB_ABS_IETA_MAX
Definition: hcalCalib.h:127
#define begin
Definition: vmac.h:32
Int_t hcalCalib::GetEntry ( Long64_t  entry,
Int_t  getall = 0 
)
inlineoverride

Definition at line 95 of file hcalCalib.h.

95  {
96  return fChain ? fChain->GetTree()->GetEntry(entry, getall) : 0;
97  }
TTree * fChain
Definition: hcalCalib.h:40
TList* hcalCalib::GetOutputList ( ) const
inlineoverride

Definition at line 101 of file hcalCalib.h.

References Terminate().

101 { return fOutput; }
void hcalCalib::Init ( TTree *  tree)
override

Referenced by Version().

void hcalCalib::makeTextFile ( )

Definition at line 661 of file hcalCalib.cc.

References funct::abs(), edmIntegrityCheck::d, MillePedeFileConverter_cfg::e, PVValHelper::eta, HcalEndcap, HcalOuter, triggerObjects_cff::id, and sd.

Referenced by SetCaloGeometry().

661  {
662  //{ HcalEmpty=0, HcalBarrel=1, HcalEndcap=2, HcalOuter=3, HcalForward=4, HcalTriggerTower=5, HcalOther=7 };
663 
664  TString sdName[8] = {"EMPTY", "HB", "HE", "HO", "HF", "TRITWR", "UNDEF", "OTHER"};
665 
666  FILE* constFile = fopen(OUTPUT_COR_COEF_FILENAME.Data(), "w+");
667 
668  // header of the constants file
669  fprintf(constFile, "%1s%16s%16s%16s%16s%9s%11s\n", "#", "eta", "phi", "depth", "det", "value", "DetId");
670 
671  // Order loops to produce sequence of constants as for phi symmetry
672 
673  for (Int_t sd = 1; sd <= 4; sd++) {
674  for (Int_t e = 1; e <= 50; e++) {
675  Int_t eta;
676 
677  for (Int_t side = 0; side < 2; side++) {
678  eta = (side == 0) ? -e : e; //ta *= (-1);
679 
680  for (Int_t phi = 1; phi <= 72; phi++) {
681  for (Int_t d = 1; d < 5; d++) {
682  if (!topo_->valid(HcalDetId(HcalSubdetector(sd), eta, phi, d)))
683  continue;
684  HcalDetId id(HcalSubdetector(sd), eta, phi, d);
685  Float_t corrFactor = 1.0;
686 
687  if (abs(eta) >= CALIB_ABS_IETA_MIN && abs(eta) <= CALIB_ABS_IETA_MAX && HcalSubdetector(sd) != HcalOuter) {
688  // if (abs(eta)>=CALIB_ABS_IETA_MIN && abs(eta)<=22 && HcalSubdetector(sd)!=HcalOuter) {
689 
690  // need some care when depths were summed for iEta=16 =>
691  // the coeficients are saved in depth 1 of HB: affects
692  Int_t subdetInd = sd;
693 
694  if (abs(eta) == 16 && HcalSubdetector(sd) == HcalEndcap && SUM_DEPTHS) {
695  subdetInd = 1;
696  }
697 
698  if (CALIB_METHOD == "L3" || CALIB_METHOD == "L3_AND_MTRX_INV") {
699  if (SUM_DEPTHS && COMBINE_PHI)
700  corrFactor = solution[HcalDetId(HcalSubdetector(subdetInd), eta, 1, 1)];
701  else if (SUM_DEPTHS)
702  corrFactor = solution[HcalDetId(HcalSubdetector(subdetInd), eta, phi, 1)];
703  else if (COMBINE_PHI)
704  corrFactor = solution[HcalDetId(HcalSubdetector(sd), eta, 1, d)];
705  else
706  corrFactor = solution[HcalDetId(HcalSubdetector(sd), eta, phi, d)];
707 
708  // Remark: a new case was added (sumSmallDepths) where the first two depths in towers 15,16
709  // are summed and stored in depth 1.
710  // For now we create the correction coef for depth 2 (set equal to depth 1)
711  // after the call to the L3 minimizer so that this case is also handled without modifying the
712  // logic above. Probably it is better to move it here?
713 
714  } // L3
715 
716  else if (CALIB_METHOD == "MATRIX_INV_OF_ETA_AVE") {
717  corrFactor = iEtaCoefMap[eta];
718  }
719 
720  else if (CALIB_METHOD == "ISO_TRK_PHI_SYM") {
721  corrFactor = solution[HcalDetId(HcalSubdetector(sd), eta, phi, d)];
722  }
723 
724  } // if within the calibration range
725 
726  fprintf(constFile, "%17i%16i%16i%16s%9.5f%11X\n", eta, phi, d, sdName[sd].Data(), corrFactor, id.rawId());
727  }
728  }
729  }
730  }
731  }
732 
733  return;
734 }
std::map< Int_t, Float_t > iEtaCoefMap
Definition: hcalCalib.h:201
bool valid(const DetId &id) const override
Bool_t SUM_DEPTHS
Definition: hcalCalib.h:117
Int_t CALIB_ABS_IETA_MIN
Definition: hcalCalib.h:128
HcalSubdetector
Definition: HcalAssistant.h:31
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const HcalTopology * topo_
Definition: hcalCalib.h:147
std::map< UInt_t, Float_t > solution
Definition: hcalCalib.h:199
Bool_t COMBINE_PHI
Definition: hcalCalib.h:119
TString CALIB_METHOD
Definition: hcalCalib.h:138
TString OUTPUT_COR_COEF_FILENAME
Definition: hcalCalib.h:143
double sd
Int_t CALIB_ABS_IETA_MAX
Definition: hcalCalib.h:127
Bool_t hcalCalib::Notify ( )
override

Referenced by Version().

Bool_t hcalCalib::Process ( Long64_t  entry)
override

Definition at line 152 of file hcalCalib.cc.

References funct::abs(), postprocess-scan-build::cells, combinePhi(), gather_cfg::cout, TCell::e(), filterCells3x3(), filterCells5x5(), filterCellsInCone(), getIEtaIPhiForHighestE(), h1_allTrkP, h1_rawSumE, h1_selTrkP_iEta10, h2_dHitRefBarrel, h2_dHitRefEndcap, HcalBarrel, HcalEndcap, HcalForward, HcalOuter, mps_fire::i, TCell::id(), M_PI, nEvents, edm::second(), TCell::SetE(), sumDepths(), and sumSmallDepths().

Referenced by Version().

152  {
153  // fChain->GetTree()->GetEntry(entry);
154  GetEntry(entry);
155 
156  set<UInt_t> uniqueIds; // for testing: check if there are duplicate cells (AA)
157 
158  Bool_t acceptEvent = kTRUE;
159 
160  ++nEvents;
161 
162  if (!(nEvents % 100000))
163  cout << "event: " << nEvents << endl;
164 
165  h1_allTrkP->Fill(targetE);
166 
167  if (targetE < MIN_TARGET_E || targetE > MAX_TARGET_E)
168  return kFALSE;
169  ;
170 
171  // make local copy as the cells may be modified due to phi/depth sum, phi corrections etc
172  vector<TCell> selectCells;
173 
174  if (cells->GetSize() == 0)
175  return kFALSE;
176 
177  if (CALIB_TYPE == "DI_JET" && probeJetEmFrac > 0.999)
178  return kTRUE;
179 
180  for (Int_t i = 0; i < cells->GetSize(); ++i) {
181  TCell* thisCell = (TCell*)cells->At(i);
182 
183  if (HcalDetId(thisCell->id()).subdet() == HcalOuter)
184  continue; // reject HO, make a switch!
185 
186  if (HcalDetId(thisCell->id()).subdet() != HcalBarrel && HcalDetId(thisCell->id()).subdet() != HcalEndcap &&
187  HcalDetId(thisCell->id()).subdet() != HcalForward) {
188  cout << "Unknown or wrong hcal subdetector: " << HcalDetId(thisCell->id()).subdet() << endl;
189  }
190 
191  // Apply phi symmetry corrections if the flag is set
193  thisCell->SetE(phiSymCor[thisCell->id()] * thisCell->e());
194 
195  if (thisCell->e() > MIN_CELL_E)
196  selectCells.push_back(*thisCell);
197  }
198 
199  if (selectCells.empty()) {
200  cout << "NO CELLS ABOVE THRESHOLD FOUND FOR TARGET!!!" << endl;
201  }
202 
203  if (SUM_DEPTHS)
204  sumDepths(selectCells);
205  else if (SUM_SMALL_DEPTHS)
206  sumSmallDepths(selectCells); // depth 1,2 in twrs 15,16
207 
208  // most energetic tower (IsoTracks) or centroid of probe jet (DiJets)
209  pair<Int_t, UInt_t> refPos;
210 
211  Int_t dEtaHitRef = 999;
212  Int_t dPhiHitRef = 999;
213 
214  if (CALIB_TYPE == "ISO_TRACK") {
215  Int_t iEtaMaxE; // filled by reference in getIEtaIPhiForHighestE
216  UInt_t iPhiMaxE; //
217 
218  getIEtaIPhiForHighestE(selectCells, iEtaMaxE, iPhiMaxE);
219 
220  dEtaHitRef = iEtaMaxE - iEtaHit;
221  dPhiHitRef = iPhiMaxE - iPhiHit;
222 
223  if (dPhiHitRef < -36)
224  dPhiHitRef += 72;
225  if (dPhiHitRef > 36)
226  dPhiHitRef -= 72;
227 
228  if (iEtaHit * iEtaMaxE < 0) {
229  if (dEtaHitRef < 0)
230  dEtaHitRef += 1;
231  if (dEtaHitRef > 0)
232  dEtaHitRef -= 1;
233  }
234 
235  if (abs(iEtaHit) < 16)
236  h2_dHitRefBarrel->Fill(dEtaHitRef, dPhiHitRef);
237  if (abs(iEtaHit) > 16 && abs(iEtaHit) < 25)
238  h2_dHitRefEndcap->Fill(dEtaHitRef, dPhiHitRef);
239 
240  // --------------------------------------------------
241  // Choice of cluster definition
242  //
243  // fixed size NxN clusters as specified in to config file
244  if (!USE_CONE_CLUSTERING) {
245  if (abs(iEtaMaxE) < 16 && HB_CLUSTER_SIZE == 3)
246  filterCells3x3(selectCells, iEtaMaxE, iPhiMaxE);
247  if (abs(iEtaMaxE) > 15 && HE_CLUSTER_SIZE == 3)
248  filterCells3x3(selectCells, iEtaMaxE, iPhiMaxE);
249 
250  if (abs(iEtaMaxE) < 16 && HB_CLUSTER_SIZE == 5)
251  filterCells5x5(selectCells, iEtaMaxE, iPhiMaxE);
252  if (abs(iEtaMaxE) > 15 && HE_CLUSTER_SIZE == 5)
253  filterCells5x5(selectCells, iEtaMaxE, iPhiMaxE);
254  } else {
255  // calculate distance at hcal surface
256  const GlobalPoint hitPositionHcal(xTrkHcal, yTrkHcal, zTrkHcal);
257  filterCellsInCone(selectCells, hitPositionHcal, MAX_CONE_DIST, theCaloGeometry);
258  }
259 
260  refPos.first = iEtaMaxE;
261  refPos.second = iPhiMaxE;
262 
263  } else if (CALIB_TYPE == "DI_JET") { // Apply selection cuts on DiJet events here
264 
266  acceptEvent = kFALSE;
267 
268  Float_t jetsDPhi = probeJetP4->DeltaPhi(*tagJetP4);
269  if (fabs(jetsDPhi * 180.0 / M_PI) < MIN_DPHI_DIJETS)
270  acceptEvent = kFALSE;
271 
273  acceptEvent = kFALSE;
274  if (fabs(probeJetP4->Eta()) < MIN_PROBEJET_ABSETA)
275  acceptEvent = kFALSE;
276  if (fabs(tagJetP4->Eta()) > MAX_TAGJET_ABSETA)
277  acceptEvent = kFALSE;
278  if (fabs(tagJetP4->Et()) < MIN_TAGJET_ET)
279  acceptEvent = kFALSE;
280 
281  if (acceptEvent) {
282  Int_t iEtaMaxE; // filled by reference in getIEtaIPhiForHighestE
283  UInt_t iPhiMaxE; //
284 
285  getIEtaIPhiForHighestE(selectCells, iEtaMaxE, iPhiMaxE);
286 
287  // The ref position for the jet is not used in the minimization at this time.
288  // It will be needed if we attempt to do matrix inversion: then the question is
289  // which value is better suited: the centroid of the jet or the hottest tower...
290 
291  // refPos.first = iEtaHit;
292  // refPos.second = iPhiHit;
293 
294  refPos.first = iEtaMaxE;
295  refPos.second = iPhiMaxE;
296 
297  if (abs(iEtaMaxE) > 40)
298  acceptEvent = kFALSE; // for testing : set as parameter (AA)
299  }
300  }
301 
302  if (COMBINE_PHI)
303  combinePhi(selectCells);
304 
305  // fill the containers for the minimization prcedures
306  vector<Float_t> energies;
307  vector<UInt_t> ids;
308 
309  for (vector<TCell>::iterator i_it = selectCells.begin(); i_it != selectCells.end(); ++i_it) {
310  // for testing : fill only unique id's
311 
312  if (uniqueIds.insert(i_it->id()).second) {
313  energies.push_back(i_it->e());
314  ids.push_back(i_it->id());
315  }
316  }
317 
318  if (CALIB_TYPE == "ISO_TRACK") {
319  if (accumulate(energies.begin(), energies.end(), 0.0) / targetE < MIN_EOVERP)
320  acceptEvent = kFALSE;
321  if (accumulate(energies.begin(), energies.end(), 0.0) / targetE > MAX_EOVERP)
322  acceptEvent = kFALSE;
323 
324  if (emEnergy > MAX_TRK_EME)
325  acceptEvent = kFALSE;
326 
327  if (abs(dEtaHitRef) > 1 || abs(dPhiHitRef) > 1)
328  acceptEvent = kFALSE;
329 
330  // Have to check if for |iEta|>20 (and neighboring region) the dPhiHitRef
331  // should be relaxed to 2. The neighboring towers have dPhi=2...
332  }
333 
334  h1_rawSumE->Fill(accumulate(energies.begin(), energies.end(), 0.0));
335 
336  // here we fill the information for the minimization procedure
337  if (acceptEvent) {
338  cellEnergies.push_back(energies);
339  cellIds.push_back(ids);
340  targetEnergies.push_back(targetE);
341  refIEtaIPhi.push_back(refPos);
342 
343  if (abs(refPos.first) <= 10)
344  h1_selTrkP_iEta10->Fill(targetE);
345  }
346 
347  // Clean up
348  energies.clear();
349  ids.clear();
350  selectCells.clear();
351 
352  return kTRUE;
353 }
void filterCellsInCone(std::vector< TCell > &selectCells, const GlobalPoint hitPositionHcal, Float_t maxConeDist, const CaloGeometry *theCaloGeometry)
std::vector< std::pair< Int_t, UInt_t > > refIEtaIPhi
Definition: hcalCalib.h:194
std::vector< Float_t > targetEnergies
Definition: hcalCalib.h:195
Float_t MAX_TARGET_E
Definition: hcalCalib.h:107
std::vector< std::vector< UInt_t > > cellIds
Definition: hcalCalib.h:193
TH2F * h2_dHitRefEndcap
Definition: hcalCalib.cc:61
TH2F * h2_dHitRefBarrel
Definition: hcalCalib.cc:60
Float_t xTrkHcal
Definition: hcalCalib.h:51
TString CALIB_TYPE
Definition: hcalCalib.h:137
TLorentzVector * tagJetP4
Definition: hcalCalib.h:58
TH1F * h1_allTrkP
Definition: hcalCalib.cc:47
Float_t zTrkHcal
Definition: hcalCalib.h:53
std::map< UInt_t, Float_t > phiSymCor
Definition: hcalCalib.h:197
Float_t e()
Definition: TCell.h:31
Float_t MAX_EOVERP
Definition: hcalCalib.h:111
Float_t targetE
Definition: hcalCalib.h:48
Bool_t SUM_DEPTHS
Definition: hcalCalib.h:117
Definition: TCell.h:15
Float_t MIN_CELL_E
Definition: hcalCalib.h:109
TLorentzVector * probeJetP4
Definition: hcalCalib.h:59
TH1F * h1_rawSumE
Definition: hcalCalib.cc:51
U second(std::pair< T, U > const &p)
void combinePhi(std::vector< TCell > &selectCells)
TH1F * h1_selTrkP_iEta10
Definition: hcalCalib.cc:49
Int_t HE_CLUSTER_SIZE
Definition: hcalCalib.h:122
UInt_t id()
Definition: TCell.h:32
Int_t iEtaHit
Definition: hcalCalib.h:44
Float_t MAX_TRK_EME
Definition: hcalCalib.h:112
Float_t MIN_DPHI_DIJETS
Definition: hcalCalib.h:115
Int_t HB_CLUSTER_SIZE
Definition: hcalCalib.h:121
Float_t MIN_TAGJET_ET
Definition: hcalCalib.h:133
Bool_t APPLY_PHI_SYM_COR_FLAG
Definition: hcalCalib.h:141
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
Float_t emEnergy
Definition: hcalCalib.h:47
std::vector< std::vector< Float_t > > cellEnergies
Definition: hcalCalib.h:192
Float_t MIN_EOVERP
Definition: hcalCalib.h:110
void SetE(Float_t e)
Definition: TCell.h:34
void filterCells3x3(std::vector< TCell > &selectCells, Int_t iEta, UInt_t iPhi)
Float_t MIN_PROBEJET_ABSETA
Definition: hcalCalib.h:135
#define M_PI
Bool_t COMBINE_PHI
Definition: hcalCalib.h:119
Float_t MAX_ET_THIRD_JET
Definition: hcalCalib.h:114
UInt_t iPhiHit
Definition: hcalCalib.h:45
Bool_t USE_CONE_CLUSTERING
Definition: hcalCalib.h:124
void sumSmallDepths(std::vector< TCell > &selectCells)
Float_t etVetoJet
Definition: hcalCalib.h:49
TClonesArray * cells
Definition: hcalCalib.h:46
void filterCells5x5(std::vector< TCell > &selectCells, Int_t iEta, UInt_t iPhi)
Bool_t SUM_SMALL_DEPTHS
Definition: hcalCalib.h:118
Int_t GetEntry(Long64_t entry, Int_t getall=0) override
Definition: hcalCalib.h:95
Float_t MAX_TAGJET_ABSETA
Definition: hcalCalib.h:132
Float_t MAX_PROBEJET_EMFRAC
Definition: hcalCalib.h:130
const CaloGeometry * theCaloGeometry
Definition: hcalCalib.h:146
void sumDepths(std::vector< TCell > &selectCells)
UInt_t nEvents
Definition: hcalCalib.cc:41
void getIEtaIPhiForHighestE(std::vector< TCell > &selectCells, Int_t &iEta, UInt_t &iPhi)
Float_t MAX_CONE_DIST
Definition: hcalCalib.h:125
Float_t yTrkHcal
Definition: hcalCalib.h:52
Float_t probeJetEmFrac
Definition: hcalCalib.h:62
Bool_t hcalCalib::ReadPhiSymCor ( )

Definition at line 599 of file hcalCalib.cc.

References gather_cfg::cout, egammaForCoreTracking_cff::depth, HcalBarrel, HcalEndcap, HcalForward, HcalOuter, mps_splice::line, sd, AlCaHLTBitMon_QueryRunRegistry::string, and relativeConstraints::value.

Referenced by SetCaloGeometry().

599  {
600  std::ifstream phiSymFile(PHI_SYM_COR_FILENAME.Data());
601 
602  if (!phiSymFile) {
603  cout << "\nERROR: Can not find file with phi symmetry constants \"" << PHI_SYM_COR_FILENAME.Data() << "\"" << endl;
604  return kFALSE;
605  }
606 
607  // assumes the format used in CSA08, first line is a comment
608 
609  Int_t iEta;
610  UInt_t iPhi;
611  UInt_t depth;
612  TString sdName;
613  UInt_t detId;
614 
615  Float_t value;
617 
619 
620  while (getline(phiSymFile, line)) {
621  if (line.empty() || line[0] == '#')
622  continue;
623 
624  std::istringstream linestream(line);
625  linestream >> iEta >> iPhi >> depth >> sdName >> value >> hex >> detId;
626 
627  if (sdName == "HB")
628  sd = HcalBarrel;
629  else if (sdName == "HE")
630  sd = HcalEndcap;
631  else if (sdName == "HO")
632  sd = HcalOuter;
633  else if (sdName == "HF")
634  sd = HcalForward;
635  else {
636  cout << "\nInvalid detector name in phi symmetry constants file: " << sdName.Data() << endl;
637  cout << "Check file and rerun!\n" << endl;
638  return kFALSE;
639  }
640 
641  // check if the data is consistent
642 
643  if (HcalDetId(sd, iEta, iPhi, depth) != HcalDetId(detId)) {
644  cout << "\nInconsistent info in phi symmetry file: subdet, iEta, iPhi, depth do not match rawId!\n" << endl;
645  return kFALSE;
646  }
647  HcalDetId hId(detId);
648  if (!topo_->valid(hId)) {
649  cout << "\nInvalid DetId from: iEta=" << iEta << " iPhi=" << iPhi << " depth=" << depth
650  << " subdet=" << sdName.Data() << " detId=" << detId << endl
651  << endl;
652  return kFALSE;
653  }
654 
655  phiSymCor[HcalDetId(sd, iEta, iPhi, depth)] = value;
656  }
657 
658  return kTRUE;
659 }
TString PHI_SYM_COR_FILENAME
Definition: hcalCalib.h:140
bool valid(const DetId &id) const override
std::map< UInt_t, Float_t > phiSymCor
Definition: hcalCalib.h:197
HcalSubdetector
Definition: HcalAssistant.h:31
const HcalTopology * topo_
Definition: hcalCalib.h:147
double sd
void hcalCalib::SetApplyPhiSymCorFlag ( Bool_t  b)
inline

Definition at line 170 of file hcalCalib.h.

References b.

Referenced by HcalCalibrator::endJob().

Bool_t APPLY_PHI_SYM_COR_FLAG
Definition: hcalCalib.h:141
double b
Definition: hdecay.h:120
void hcalCalib::SetCalibAbsIEtaMax ( Int_t  i)
inline

Definition at line 166 of file hcalCalib.h.

References mps_fire::i.

Referenced by HcalCalibrator::endJob().

166 { CALIB_ABS_IETA_MAX = i; }
Int_t CALIB_ABS_IETA_MAX
Definition: hcalCalib.h:127
void hcalCalib::SetCalibAbsIEtaMin ( Int_t  i)
inline

Definition at line 167 of file hcalCalib.h.

References mps_fire::i.

Referenced by HcalCalibrator::endJob().

167 { CALIB_ABS_IETA_MIN = i; }
Int_t CALIB_ABS_IETA_MIN
Definition: hcalCalib.h:128
void hcalCalib::SetCalibMethod ( const TString &  s)
inline

Definition at line 159 of file hcalCalib.h.

References alignCSCRings::s.

Referenced by HcalCalibrator::endJob().

159 { CALIB_METHOD = s; }
TString CALIB_METHOD
Definition: hcalCalib.h:138
void hcalCalib::SetCalibType ( const TString &  s)
inline

Definition at line 158 of file hcalCalib.h.

References alignCSCRings::s.

Referenced by HcalCalibrator::endJob().

158 { CALIB_TYPE = s; }
TString CALIB_TYPE
Definition: hcalCalib.h:137
void hcalCalib::SetCaloGeometry ( const CaloGeometry g,
const HcalTopology topo 
)
inline

Definition at line 180 of file hcalCalib.h.

References g, GetCoefFromMtrxInvOfAve(), makeTextFile(), and ReadPhiSymCor().

Referenced by HcalCalibrator::endJob().

180  {
181  theCaloGeometry = g;
182  topo_ = topo;
183  }
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
Definition: Activities.doc:4
const HcalTopology * topo_
Definition: hcalCalib.h:147
const CaloGeometry * theCaloGeometry
Definition: hcalCalib.h:146
void hcalCalib::SetCombinePhiFlag ( Bool_t  b)
inline

Definition at line 153 of file hcalCalib.h.

References b.

Referenced by HcalCalibrator::endJob().

153 { COMBINE_PHI = b; }
Bool_t COMBINE_PHI
Definition: hcalCalib.h:119
double b
Definition: hdecay.h:120
void hcalCalib::SetConeMaxDist ( Float_t  d)
inline

Definition at line 164 of file hcalCalib.h.

References edmIntegrityCheck::d.

Referenced by HcalCalibrator::endJob().

void hcalCalib::SetHbClusterSize ( Int_t  i)
inline

Definition at line 160 of file hcalCalib.h.

References mps_fire::i.

Referenced by HcalCalibrator::endJob().

160 { HB_CLUSTER_SIZE = i; }
Int_t HB_CLUSTER_SIZE
Definition: hcalCalib.h:121
void hcalCalib::SetHeClusterSize ( Int_t  i)
inline

Definition at line 161 of file hcalCalib.h.

References mps_fire::i.

Referenced by HcalCalibrator::endJob().

161 { HE_CLUSTER_SIZE = i; }
Int_t HE_CLUSTER_SIZE
Definition: hcalCalib.h:122
void hcalCalib::SetHistoFileName ( const TString &  filename)
inline

Definition at line 178 of file hcalCalib.h.

References corrVsCorr::filename.

Referenced by HcalCalibrator::endJob().

TString HISTO_FILENAME
Definition: hcalCalib.h:144
void hcalCalib::SetInputList ( TList *  input)
inlineoverride

Definition at line 100 of file hcalCalib.h.

References input.

100 { fInput = input; }
static std::string const input
Definition: EdmProvDump.cc:48
void hcalCalib::SetMaxEOverP ( Float_t  e)
inline

Definition at line 156 of file hcalCalib.h.

References MillePedeFileConverter_cfg::e.

Referenced by HcalCalibrator::endJob().

void hcalCalib::SetMaxEtThirdJet ( Float_t  et)
inline

Definition at line 168 of file hcalCalib.h.

References stringResolutionProvider_cfi::et.

Referenced by HcalCalibrator::endJob().

168 { MAX_ET_THIRD_JET = et; }
Float_t MAX_ET_THIRD_JET
Definition: hcalCalib.h:114
et
define resolution functions of each parameter
void hcalCalib::SetMaxProbeJetEmFrac ( Float_t  f)
inline

Definition at line 172 of file hcalCalib.h.

References f.

Referenced by HcalCalibrator::endJob().

172 { MAX_PROBEJET_EMFRAC = f; }
double f[11][100]
Float_t MAX_PROBEJET_EMFRAC
Definition: hcalCalib.h:130
void hcalCalib::SetMaxTagJetAbsEta ( Float_t  e)
inline
void hcalCalib::SetMaxTagJetEmFrac ( Float_t  f)
inline

Definition at line 173 of file hcalCalib.h.

References f.

Referenced by HcalCalibrator::endJob().

173 { MAX_TAGJET_EMFRAC = f; }
double f[11][100]
Float_t MAX_TAGJET_EMFRAC
Definition: hcalCalib.h:131
void hcalCalib::SetMaxTargetE ( Float_t  e)
inline

Definition at line 150 of file hcalCalib.h.

References MillePedeFileConverter_cfg::e.

Referenced by HcalCalibrator::endJob().

void hcalCalib::SetMaxTrkEmE ( Float_t  e)
inline

Definition at line 157 of file hcalCalib.h.

References MillePedeFileConverter_cfg::e.

Referenced by HcalCalibrator::endJob().

void hcalCalib::SetMinCellE ( Float_t  e)
inline

Definition at line 154 of file hcalCalib.h.

References MillePedeFileConverter_cfg::e.

Referenced by HcalCalibrator::endJob().

void hcalCalib::SetMinDPhiDiJets ( Float_t  dphi)
inline

Definition at line 169 of file hcalCalib.h.

Referenced by HcalCalibrator::endJob().

169 { MIN_DPHI_DIJETS = dphi; }
Float_t MIN_DPHI_DIJETS
Definition: hcalCalib.h:115
void hcalCalib::SetMinEOverP ( Float_t  e)
inline

Definition at line 155 of file hcalCalib.h.

References MillePedeFileConverter_cfg::e.

Referenced by HcalCalibrator::endJob().

void hcalCalib::SetMinProbeJetAbsEta ( Float_t  e)
inline
void hcalCalib::SetMinTagJetEt ( Float_t  e)
inline

Definition at line 175 of file hcalCalib.h.

References MillePedeFileConverter_cfg::e.

Referenced by HcalCalibrator::endJob().

void hcalCalib::SetMinTargetE ( Float_t  e)
inline

Definition at line 149 of file hcalCalib.h.

References MillePedeFileConverter_cfg::e.

Referenced by HcalCalibrator::endJob().

void hcalCalib::SetObject ( TObject *  obj)
inlineoverride

Definition at line 99 of file hcalCalib.h.

References haddnano::obj.

99 { fObject = obj; }
void hcalCalib::SetOption ( const char *  option)
inlineoverride

Definition at line 98 of file hcalCalib.h.

References TSGForRoadSearch_cfi::option.

98 { fOption = option; }
void hcalCalib::SetOutputCorCoefFileName ( const TString &  filename)
inline

Definition at line 177 of file hcalCalib.h.

References corrVsCorr::filename.

Referenced by HcalCalibrator::endJob().

TString OUTPUT_COR_COEF_FILENAME
Definition: hcalCalib.h:143
void hcalCalib::SetPhiSymCorFileName ( const TString &  filename)
inline

Definition at line 171 of file hcalCalib.h.

References corrVsCorr::filename.

Referenced by HcalCalibrator::endJob().

TString PHI_SYM_COR_FILENAME
Definition: hcalCalib.h:140
void hcalCalib::SetSumDepthsFlag ( Bool_t  b)
inline

Definition at line 151 of file hcalCalib.h.

References b.

Referenced by HcalCalibrator::endJob().

151 { SUM_DEPTHS = b; }
Bool_t SUM_DEPTHS
Definition: hcalCalib.h:117
double b
Definition: hdecay.h:120
void hcalCalib::SetSumSmallDepthsFlag ( Bool_t  b)
inline

Definition at line 152 of file hcalCalib.h.

References b.

Referenced by HcalCalibrator::endJob().

152 { SUM_SMALL_DEPTHS = b; }
double b
Definition: hdecay.h:120
Bool_t SUM_SMALL_DEPTHS
Definition: hcalCalib.h:118
void hcalCalib::SetUseConeClustering ( Bool_t  b)
inline

Definition at line 163 of file hcalCalib.h.

References b.

Referenced by HcalCalibrator::endJob().

163 { USE_CONE_CLUSTERING = b; }
Bool_t USE_CONE_CLUSTERING
Definition: hcalCalib.h:124
double b
Definition: hdecay.h:120
void hcalCalib::Terminate ( )
override

Definition at line 357 of file hcalCalib.cc.

References funct::abs(), gather_cfg::cout, HcalDetId::depth(), h1_allTrkP, h1_corResp, h1_corRespBarrel, h1_corRespEndcap, h1_corRespIEta, h1_numEventsTwrIEta, h1_rawResp, h1_rawRespBarrel, h1_rawRespEndcap, h1_rawSumE, h1_selTrkP_iEta10, h1_trkP, h2_dHitRefBarrel, h2_dHitRefEndcap, HcalBarrel, histoFile, mps_fire::i, HcalDetId::ieta(), HcalDetId::ietaAbs(), HcalDetId::iphi(), MinL3AlgoUniv< IDdet >::iterate(), findQualityFiles::size, and HcalDetId::subdet().

Referenced by GetOutputList().

357  {
358  cout << "\n\nFinished reading the events.\n";
359  cout << "Number of input objects: " << cellIds.size() << endl;
360  cout << "Performing minimization: depending on selected method can take some time...\n\n";
361 
362  for (vector<pair<Int_t, UInt_t> >::iterator it_rp = refIEtaIPhi.begin(); it_rp != refIEtaIPhi.end(); ++it_rp) {
363  Float_t weight = (abs(it_rp->first) < 21) ? 1.0 / 72.0 : 1.0 / 36.0;
364  h1_numEventsTwrIEta->Fill(it_rp->first, weight);
365  }
366 
367  if (CALIB_METHOD == "MATRIX_INV_OF_ETA_AVE") {
369  } else if (CALIB_METHOD == "L3" || CALIB_METHOD == "L3_AND_MTRX_INV") {
370  int eventWeight = 2; // 2 is the default (try at some point 0,1,2,3)
371  MinL3AlgoUniv<UInt_t>* thisL3Algo = new MinL3AlgoUniv<UInt_t>(eventWeight);
372  int numIterations = 10; // default 10
373 
374  solution = thisL3Algo->iterate(cellEnergies, cellIds, targetEnergies, numIterations);
375 
376  // in order to handle the case where sumDepths="false", but the flag to sum depths 1,2 in HB towers 15, 16
377  // is set (sumSmallDepths) we create entries in "solution" to create equal correction here
378  // for each encountered coef in depth one.
379 
380  if (!SUM_DEPTHS && SUM_SMALL_DEPTHS) {
381  vector<UInt_t> idForSummedCells;
382 
383  for (map<UInt_t, Float_t>::iterator m_it = solution.begin(); m_it != solution.end(); ++m_it) {
384  if (HcalDetId(m_it->first).ietaAbs() != 15 && HcalDetId(m_it->first).ietaAbs() != 16)
385  continue;
386  if (HcalDetId(m_it->first).subdet() != HcalBarrel)
387  continue;
388  if (HcalDetId(m_it->first).depth() == 1)
389  idForSummedCells.push_back(HcalDetId(m_it->first));
390  }
391 
392  for (vector<UInt_t>::iterator v_it = idForSummedCells.begin(); v_it != idForSummedCells.end(); ++v_it) {
393  UInt_t addCoefId = HcalDetId(HcalBarrel, HcalDetId(*v_it).ieta(), HcalDetId(*v_it).iphi(), 2);
394  solution[addCoefId] = solution[*v_it];
395  }
396 
397  } // end of special treatment for "sumSmallDepths" mode
398 
399  if (CALIB_METHOD == "L3_AND_MTRX_INV") {
401 
402  // loop over the solution from L3 and multiply by the additional factor from
403  // the matrix inversion. Set coef outside of the valid calibration region =1.
404  for (map<UInt_t, Float_t>::iterator it_s = solution.begin(); it_s != solution.end(); ++it_s) {
405  Int_t iEtaSol = HcalDetId(it_s->first).ieta();
406  if (abs(iEtaSol) < CALIB_ABS_IETA_MIN || abs(iEtaSol) > CALIB_ABS_IETA_MAX)
407  it_s->second = 1.0;
408  else
409  it_s->second *= iEtaCoefMap[iEtaSol];
410  }
411 
412  } // if CALIB_METHOD=="L3_AND_MTRX_INV"
413 
414  } // end of L3 or L3 + mtrx inversion minimization
415 
416  // done getting the constants -> write the formatted file
417  makeTextFile();
418 
419  // fill some histograms
420  Float_t rawResp = 0;
421  Float_t corResp = 0;
422  Int_t maxIEta = 0;
423  Int_t minIEta = 999;
424 
425  for (unsigned int i = 0; i < cellEnergies.size(); ++i) {
426  Int_t iEta;
427  for (unsigned int j = 0; j < (cellEnergies[i]).size(); ++j) {
428  iEta = HcalDetId(cellIds[i][j]).ieta();
429  rawResp += (cellEnergies[i])[j];
430 
431  if (CALIB_METHOD == "L3_AND_MTRX_INV") {
432  corResp += (solution[cellIds[i][j]] * cellEnergies[i][j]);
433  } else if (CALIB_METHOD == "L3") {
434  corResp += (solution[cellIds[i][j]] * (cellEnergies[i][j]));
435  } else if (CALIB_METHOD == "MATRIX_INV_OF_ETA_AVE") {
436  corResp += (iEtaCoefMap[iEta] * cellEnergies[i][j]);
437  }
438 
439  if (maxIEta < abs(iEta))
440  maxIEta = abs(iEta);
441  if (minIEta > abs(iEta))
442  minIEta = abs(iEta);
443  }
444 
445  rawResp /= targetEnergies[i];
446  corResp /= targetEnergies[i];
447 
448  // fill histograms based on iEta on ref point of the cluster (for now: hottest tower)
449  // expect range |iEta|<=24 (to do: add flexibility for arbitrary range)
450 
451  if (CALIB_TYPE == "ISO_TRACK") {
452  Int_t ind = refIEtaIPhi[i].first;
453  (ind < 0) ? (ind += 24) : (ind += 23);
454  if (ind >= 0 && ind < 48) {
455  h1_corRespIEta[ind]->Fill(corResp);
456  }
457 
458  // fill histograms for cases where all towers are in the barrel or endcap
459  if (maxIEta < 25) {
460  h1_rawResp->Fill(rawResp);
461  h1_corResp->Fill(corResp);
462  }
463  if (maxIEta < 15) {
464  h1_rawRespBarrel->Fill(rawResp);
465  h1_corRespBarrel->Fill(corResp);
466  } else if (maxIEta < 25 && minIEta > 16) {
467  h1_rawRespEndcap->Fill(rawResp);
468  h1_corRespEndcap->Fill(corResp);
469  }
470  } // histograms for isotrack calibration
471 
472  else {
473  // put jet plots here
474  }
475 
476  rawResp = 0;
477  corResp = 0;
478  maxIEta = 0;
479  minIEta = 999;
480  }
481 
482  // save the histograms
483  h1_trkP->Write();
484  h1_allTrkP->Write();
485 
486  h1_selTrkP_iEta10->Write();
487 
488  h1_rawSumE->Write();
489  h1_rawResp->Write();
490  h1_corResp->Write();
491  h1_rawRespBarrel->Write();
492  h1_corRespBarrel->Write();
493  h1_rawRespEndcap->Write();
494  h1_corRespEndcap->Write();
495  h1_numEventsTwrIEta->Write();
496  h2_dHitRefBarrel->Write();
497  h2_dHitRefEndcap->Write();
498  for (Int_t i = 0; i < 48; ++i) {
499  h1_corRespIEta[i]->Write();
500  }
501 
502  histoFile->Write();
503  histoFile->Close();
504 
505  cout << "\n Finished calibration.\n " << endl;
506 
507 } // end of Terminate()
std::vector< std::pair< Int_t, UInt_t > > refIEtaIPhi
Definition: hcalCalib.h:194
size
Write out results.
std::vector< Float_t > targetEnergies
Definition: hcalCalib.h:195
TH1F * h1_corRespBarrel
Definition: hcalCalib.cc:55
TFile * histoFile
Definition: hcalCalib.cc:43
TH1F * h1_corRespIEta[48]
Definition: hcalCalib.cc:65
std::map< Int_t, Float_t > iEtaCoefMap
Definition: hcalCalib.h:201
std::vector< std::vector< UInt_t > > cellIds
Definition: hcalCalib.h:193
TH1F * h1_rawRespBarrel
Definition: hcalCalib.cc:54
HcalSubdetector subdet() const
get the subdetector
Definition: HcalDetId.h:146
void GetCoefFromMtrxInvOfAve()
Definition: hcalCalib.cc:511
TH2F * h2_dHitRefEndcap
Definition: hcalCalib.cc:61
TH2F * h2_dHitRefBarrel
Definition: hcalCalib.cc:60
TString CALIB_TYPE
Definition: hcalCalib.h:137
TH1F * h1_allTrkP
Definition: hcalCalib.cc:47
Definition: weight.py:1
Bool_t SUM_DEPTHS
Definition: hcalCalib.h:117
TH1F * h1_numEventsTwrIEta
Definition: hcalCalib.cc:58
TH1F * h1_rawSumE
Definition: hcalCalib.cc:51
Int_t CALIB_ABS_IETA_MIN
Definition: hcalCalib.h:128
TH1F * h1_selTrkP_iEta10
Definition: hcalCalib.cc:49
int depth() const
get the tower depth
Definition: HcalDetId.h:166
int ieta() const
get the cell ieta
Definition: HcalDetId.h:159
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::map< UInt_t, Float_t > solution
Definition: hcalCalib.h:199
std::vector< std::vector< Float_t > > cellEnergies
Definition: hcalCalib.h:192
int ietaAbs() const
get the absolute value of the cell ieta
Definition: HcalDetId.h:154
TH1F * h1_corRespEndcap
Definition: hcalCalib.cc:57
TH1F * h1_rawResp
Definition: hcalCalib.cc:52
int iphi() const
get the cell iphi
Definition: HcalDetId.h:161
TString CALIB_METHOD
Definition: hcalCalib.h:138
TH1F * h1_rawRespEndcap
Definition: hcalCalib.cc:56
TH1F * h1_trkP
Definition: hcalCalib.cc:46
TH1F * h1_corResp
Definition: hcalCalib.cc:53
Int_t CALIB_ABS_IETA_MAX
Definition: hcalCalib.h:127
void makeTextFile()
Definition: hcalCalib.cc:661
Bool_t SUM_SMALL_DEPTHS
Definition: hcalCalib.h:118
IDmap iterate(const std::vector< std::vector< float > > &eventMatrix, const std::vector< std::vector< IDdet > > &idMatrix, const std::vector< float > &energyVector, const int &nIter, const bool &normalizeFlag=false)
Definition: MinL3AlgoUniv.h:81
Int_t hcalCalib::Version ( ) const
inlineoverride

Definition at line 89 of file hcalCalib.h.

References Begin(), mps_splice::entry, Init(), Notify(), and Process().

89 { return 2; }

Member Data Documentation

Bool_t hcalCalib::APPLY_PHI_SYM_COR_FLAG

Definition at line 141 of file hcalCalib.h.

TBranch* hcalCalib::b_cells

Definition at line 69 of file hcalCalib.h.

TBranch* hcalCalib::b_emEnergy

Definition at line 70 of file hcalCalib.h.

TBranch* hcalCalib::b_etVetoJet

Definition at line 72 of file hcalCalib.h.

TBranch* hcalCalib::b_eventNumber

Definition at line 65 of file hcalCalib.h.

TBranch* hcalCalib::b_iEtaHit

Definition at line 67 of file hcalCalib.h.

TBranch* hcalCalib::b_iPhiHit

Definition at line 68 of file hcalCalib.h.

TBranch* hcalCalib::b_probeJetEmFrac

Definition at line 82 of file hcalCalib.h.

TBranch* hcalCalib::b_probeJetP4

Definition at line 85 of file hcalCalib.h.

TBranch* hcalCalib::b_runNumber

Definition at line 66 of file hcalCalib.h.

TBranch* hcalCalib::b_tagJetEmFrac

Definition at line 81 of file hcalCalib.h.

TBranch* hcalCalib::b_tagJetP4

Definition at line 84 of file hcalCalib.h.

TBranch* hcalCalib::b_targetE

Definition at line 71 of file hcalCalib.h.

TBranch* hcalCalib::b_xTrkEcal

Definition at line 77 of file hcalCalib.h.

TBranch* hcalCalib::b_xTrkHcal

Definition at line 74 of file hcalCalib.h.

TBranch* hcalCalib::b_yTrkEcal

Definition at line 78 of file hcalCalib.h.

TBranch* hcalCalib::b_yTrkHcal

Definition at line 75 of file hcalCalib.h.

TBranch* hcalCalib::b_zTrkEcal

Definition at line 79 of file hcalCalib.h.

TBranch* hcalCalib::b_zTrkHcal

Definition at line 76 of file hcalCalib.h.

Int_t hcalCalib::CALIB_ABS_IETA_MAX

Definition at line 127 of file hcalCalib.h.

Int_t hcalCalib::CALIB_ABS_IETA_MIN

Definition at line 128 of file hcalCalib.h.

TString hcalCalib::CALIB_METHOD

Definition at line 138 of file hcalCalib.h.

TString hcalCalib::CALIB_TYPE

Definition at line 137 of file hcalCalib.h.

std::vector<std::vector<Float_t> > hcalCalib::cellEnergies

Definition at line 192 of file hcalCalib.h.

std::vector<std::vector<UInt_t> > hcalCalib::cellIds

Definition at line 193 of file hcalCalib.h.

TClonesArray* hcalCalib::cells

Definition at line 46 of file hcalCalib.h.

Bool_t hcalCalib::COMBINE_PHI

Definition at line 119 of file hcalCalib.h.

Float_t hcalCalib::emEnergy

Definition at line 47 of file hcalCalib.h.

Float_t hcalCalib::etVetoJet

Definition at line 49 of file hcalCalib.h.

UInt_t hcalCalib::eventNumber

pointer to the analyzed TTree or TChain

Definition at line 42 of file hcalCalib.h.

Referenced by Vispa.Plugins.EdmBrowser.EdmDataAccessor.EdmDataAccessor::setFilterBranches().

TTree* hcalCalib::fChain

Definition at line 40 of file hcalCalib.h.

Int_t hcalCalib::HB_CLUSTER_SIZE

Definition at line 121 of file hcalCalib.h.

Int_t hcalCalib::HE_CLUSTER_SIZE

Definition at line 122 of file hcalCalib.h.

TString hcalCalib::HISTO_FILENAME

Definition at line 144 of file hcalCalib.h.

std::map<Int_t, Float_t> hcalCalib::iEtaCoefMap

Definition at line 201 of file hcalCalib.h.

Int_t hcalCalib::iEtaHit

Definition at line 44 of file hcalCalib.h.

UInt_t hcalCalib::iPhiHit

Definition at line 45 of file hcalCalib.h.

Float_t hcalCalib::MAX_CONE_DIST

Definition at line 125 of file hcalCalib.h.

Float_t hcalCalib::MAX_EOVERP

Definition at line 111 of file hcalCalib.h.

Float_t hcalCalib::MAX_ET_THIRD_JET

Definition at line 114 of file hcalCalib.h.

Float_t hcalCalib::MAX_PROBEJET_EMFRAC

Definition at line 130 of file hcalCalib.h.

Float_t hcalCalib::MAX_TAGJET_ABSETA

Definition at line 132 of file hcalCalib.h.

Float_t hcalCalib::MAX_TAGJET_EMFRAC

Definition at line 131 of file hcalCalib.h.

Float_t hcalCalib::MAX_TARGET_E

Definition at line 107 of file hcalCalib.h.

Float_t hcalCalib::MAX_TRK_EME

Definition at line 112 of file hcalCalib.h.

Float_t hcalCalib::MIN_CELL_E

Definition at line 109 of file hcalCalib.h.

Float_t hcalCalib::MIN_DPHI_DIJETS

Definition at line 115 of file hcalCalib.h.

Float_t hcalCalib::MIN_EOVERP

Definition at line 110 of file hcalCalib.h.

Float_t hcalCalib::MIN_PROBEJET_ABSETA

Definition at line 135 of file hcalCalib.h.

Float_t hcalCalib::MIN_TAGJET_ET

Definition at line 133 of file hcalCalib.h.

Float_t hcalCalib::MIN_TARGET_E

Definition at line 106 of file hcalCalib.h.

TString hcalCalib::OUTPUT_COR_COEF_FILENAME

Definition at line 143 of file hcalCalib.h.

TString hcalCalib::PHI_SYM_COR_FILENAME

Definition at line 140 of file hcalCalib.h.

std::map<UInt_t, Float_t> hcalCalib::phiSymCor

Definition at line 197 of file hcalCalib.h.

Float_t hcalCalib::probeJetEmFrac

Definition at line 62 of file hcalCalib.h.

TLorentzVector* hcalCalib::probeJetP4

Definition at line 59 of file hcalCalib.h.

std::vector<std::pair<Int_t, UInt_t> > hcalCalib::refIEtaIPhi

Definition at line 194 of file hcalCalib.h.

UInt_t hcalCalib::runNumber

Definition at line 43 of file hcalCalib.h.

Referenced by TH2PolyOfflineMaps.TH2PolyOfflineMaps::PrintTrackerMaps().

std::map<UInt_t, Float_t> hcalCalib::solution

Definition at line 199 of file hcalCalib.h.

Bool_t hcalCalib::SUM_DEPTHS

Definition at line 117 of file hcalCalib.h.

Bool_t hcalCalib::SUM_SMALL_DEPTHS

Definition at line 118 of file hcalCalib.h.

Float_t hcalCalib::tagJetEmFrac

Definition at line 61 of file hcalCalib.h.

TLorentzVector* hcalCalib::tagJetP4

Definition at line 58 of file hcalCalib.h.

Float_t hcalCalib::targetE

Definition at line 48 of file hcalCalib.h.

std::vector<Float_t> hcalCalib::targetEnergies

Definition at line 195 of file hcalCalib.h.

const CaloGeometry* hcalCalib::theCaloGeometry

Definition at line 146 of file hcalCalib.h.

const HcalTopology* hcalCalib::topo_

Definition at line 147 of file hcalCalib.h.

Bool_t hcalCalib::USE_CONE_CLUSTERING

Definition at line 124 of file hcalCalib.h.

Float_t hcalCalib::xTrkEcal

Definition at line 54 of file hcalCalib.h.

Float_t hcalCalib::xTrkHcal

Definition at line 51 of file hcalCalib.h.

Float_t hcalCalib::yTrkEcal

Definition at line 55 of file hcalCalib.h.

Float_t hcalCalib::yTrkHcal

Definition at line 52 of file hcalCalib.h.

Float_t hcalCalib::zTrkEcal

Definition at line 56 of file hcalCalib.h.

Float_t hcalCalib::zTrkHcal

Definition at line 53 of file hcalCalib.h.