9 #include "Math/Interpolator.h"
13 : theEBthreshold(-1000.),
14 theEEthreshold(-1000.),
16 theUseEtEBTresholdFlag(
false),
17 theUseEtEETresholdFlag(
false),
18 theUseSymEBTresholdFlag(
false),
19 theUseSymEETresholdFlag(
false),
22 theHcalThreshold(-1000.),
23 theHBthreshold(-1000.),
24 theHESthreshold(-1000.),
25 theHEDthreshold(-1000.),
26 theHOthreshold0(-1000.),
27 theHOthresholdPlus1(-1000.),
28 theHOthresholdMinus1(-1000.),
29 theHOthresholdPlus2(-1000.),
30 theHOthresholdMinus2(-1000.),
31 theHF1threshold(-1000.),
32 theHF2threshold(-1000.),
33 theEBGrid(std::vector<double>(5,10.)),
34 theEBWeights(std::vector<double>(5,1.)),
35 theEEGrid(std::vector<double>(5,10.)),
36 theEEWeights(std::vector<double>(5,1.)),
37 theHBGrid(std::vector<double>(5,10.)),
38 theHBWeights(std::vector<double>(5,1.)),
39 theHESGrid(std::vector<double>(5,10.)),
40 theHESWeights(std::vector<double>(5,1.)),
41 theHEDGrid(std::vector<double>(5,10.)),
42 theHEDWeights(std::vector<double>(5,1.)),
43 theHOGrid(std::vector<double>(5,10.)),
44 theHOWeights(std::vector<double>(5,1.)),
45 theHF1Grid(std::vector<double>(5,10.)),
46 theHF1Weights(std::vector<double>(5,1.)),
47 theHF2Grid(std::vector<double>(5,10.)),
48 theHF2Weights(std::vector<double>(5,1.)),
58 theEBSumThreshold(-1000.),
59 theEESumThreshold(-1000.),
62 theTowerConstituentsMap(0),
65 theMomConstrMethod(0),
78 bool useSymEBTreshold,
79 bool useSymEETreshold,
82 double HBthreshold,
double HESthreshold,
double HEDthreshold,
83 double HOthreshold0,
double HOthresholdPlus1,
double HOthresholdMinus1,
84 double HOthresholdPlus2,
double HOthresholdMinus2,
85 double HF1threshold,
double HF2threshold,
86 double EBweight,
double EEweight,
87 double HBweight,
double HESweight,
double HEDweight,
88 double HOweight,
double HF1weight,
double HF2weight,
99 : theEBthreshold(EBthreshold),
100 theEEthreshold(EEthreshold),
102 theUseEtEBTresholdFlag(useEtEBTreshold),
103 theUseEtEETresholdFlag(useEtEETreshold),
104 theUseSymEBTresholdFlag(useSymEBTreshold),
105 theUseSymEETresholdFlag(useSymEETreshold),
107 theHcalThreshold(HcalThreshold),
108 theHBthreshold(HBthreshold),
109 theHESthreshold(HESthreshold),
110 theHEDthreshold(HEDthreshold),
111 theHOthreshold0(HOthreshold0),
112 theHOthresholdPlus1(HOthresholdPlus1),
113 theHOthresholdMinus1(HOthresholdMinus1),
114 theHOthresholdPlus2(HOthresholdPlus2),
115 theHOthresholdMinus2(HOthresholdMinus2),
116 theHF1threshold(HF1threshold),
117 theHF2threshold(HF2threshold),
118 theEBGrid(std::vector<double>(5,10.)),
119 theEBWeights(std::vector<double>(5,1.)),
120 theEEGrid(std::vector<double>(5,10.)),
121 theEEWeights(std::vector<double>(5,1.)),
122 theHBGrid(std::vector<double>(5,10.)),
123 theHBWeights(std::vector<double>(5,1.)),
124 theHESGrid(std::vector<double>(5,10.)),
125 theHESWeights(std::vector<double>(5,1.)),
126 theHEDGrid(std::vector<double>(5,10.)),
127 theHEDWeights(std::vector<double>(5,1.)),
128 theHOGrid(std::vector<double>(5,10.)),
129 theHOWeights(std::vector<double>(5,1.)),
130 theHF1Grid(std::vector<double>(5,10.)),
131 theHF1Weights(std::vector<double>(5,1.)),
132 theHF2Grid(std::vector<double>(5,10.)),
133 theHF2Weights(std::vector<double>(5,1.)),
134 theEBweight(EBweight),
135 theEEweight(EEweight),
136 theHBweight(HBweight),
137 theHESweight(HESweight),
138 theHEDweight(HEDweight),
139 theHOweight(HOweight),
140 theHF1weight(HF1weight),
141 theHF2weight(HF2weight),
142 theEcutTower(EcutTower),
143 theEBSumThreshold(EBSumThreshold),
144 theEESumThreshold(EESumThreshold),
147 theMomConstrMethod(momConstrMethod),
148 theMomHBDepth(momHBDepth),
149 theMomHEDepth(momHEDepth),
150 theMomEBDepth(momEBDepth),
151 theMomEEDepth(momEEDepth),
152 theHcalPhase(hcalPhase)
157 bool useEtEBTreshold,
158 bool useEtEETreshold,
159 bool useSymEBTreshold,
160 bool useSymEETreshold,
163 double HBthreshold,
double HESthreshold,
double HEDthreshold,
164 double HOthreshold0,
double HOthresholdPlus1,
double HOthresholdMinus1,
165 double HOthresholdPlus2,
double HOthresholdMinus2,
166 double HF1threshold,
double HF2threshold,
167 const std::vector<double> &
EBGrid,
const std::vector<double> &
EBWeights,
168 const std::vector<double> &
EEGrid,
const std::vector<double> &
EEWeights,
169 const std::vector<double> &
HBGrid,
const std::vector<double> &
HBWeights,
172 const std::vector<double> &
HOGrid,
const std::vector<double> &
HOWeights,
175 double EBweight,
double EEweight,
176 double HBweight,
double HESweight,
double HEDweight,
177 double HOweight,
double HF1weight,
double HF2weight,
188 : theEBthreshold(EBthreshold),
189 theEEthreshold(EEthreshold),
191 theUseEtEBTresholdFlag(useEtEBTreshold),
192 theUseEtEETresholdFlag(useEtEETreshold),
193 theUseSymEBTresholdFlag(useSymEBTreshold),
194 theUseSymEETresholdFlag(useSymEETreshold),
196 theHcalThreshold(HcalThreshold),
197 theHBthreshold(HBthreshold),
198 theHESthreshold(HESthreshold),
199 theHEDthreshold(HEDthreshold),
200 theHOthreshold0(HOthreshold0),
201 theHOthresholdPlus1(HOthresholdPlus1),
202 theHOthresholdMinus1(HOthresholdMinus1),
203 theHOthresholdPlus2(HOthresholdPlus2),
204 theHOthresholdMinus2(HOthresholdMinus2),
205 theHF1threshold(HF1threshold),
206 theHF2threshold(HF2threshold),
208 theEBWeights(EBWeights),
210 theEEWeights(EEWeights),
212 theHBWeights(HBWeights),
214 theHESWeights(HESWeights),
216 theHEDWeights(HEDWeights),
218 theHOWeights(HOWeights),
220 theHF1Weights(HF1Weights),
222 theHF2Weights(HF2Weights),
223 theEBweight(EBweight),
224 theEEweight(EEweight),
225 theHBweight(HBweight),
226 theHESweight(HESweight),
227 theHEDweight(HEDweight),
228 theHOweight(HOweight),
229 theHF1weight(HF1weight),
230 theHF2weight(HF2weight),
231 theEcutTower(EcutTower),
232 theEBSumThreshold(EBSumThreshold),
233 theEESumThreshold(EESumThreshold),
236 theMomConstrMethod(momConstrMethod),
237 theMomHBDepth(momHBDepth),
238 theMomHEDepth(momHEDepth),
239 theMomEBDepth(momEBDepth),
240 theMomEEDepth(momEEDepth),
241 theHcalPhase(hcalPhase)
265 std::vector<int> tower28depths;
266 int ndepths, startdepth;
272 std::vector<bool> isMergedDepth(ndepths,
true);
273 for(
int i = 0;
i <
std::min(6,(
int)(tower28depths.size()));
i++){
274 isMergedDepth[tower28depths[
i]-startdepth] =
false;
278 for(
int i = 0;
i < ndepths;
i++){
294 hbheItr != hbhe.
end(); ++hbheItr)
300 hoItr != ho.
end(); ++hoItr)
306 hfItr != hf.
end(); ++hfItr)
312 ecItr != ec.
end(); ++ecItr)
322 ctcItr != ctc.
end(); ++ctcItr) {
339 if (!mt.empty() ) {
convert(mt.id, mt, result); }
353 ctcItr != ctc.
end(); ++ctcItr) {
356 double newE_em = ctcItr->emEnergy();
357 double newE_had = ctcItr->hadEnergy();
358 double newE_outer = ctcItr->outerEnergy();
365 double E_short = 0.5 * newE_had;
366 double E_long = newE_em + 0.5 * newE_had;
371 newE_em = E_long - E_short;
372 newE_had = 2.0 * E_short;
378 for (
unsigned int iConst = 0; iConst < ctcItr->constituentsSize(); ++iConst) {
379 DetId constId = ctcItr->constituent(iConst);
386 for (
unsigned int iConst = 0; iConst < ctcItr->constituentsSize(); ++iConst) {
387 DetId constId = ctcItr->constituent(iConst);
395 for (
unsigned int iConst = 0; iConst < ctcItr->constituentsSize(); ++iConst) {
396 DetId constId = ctcItr->constituent(iConst);
414 double f_em = 1.0/cosh(emPoint.
eta());
415 double f_had = 1.0/cosh(hadPoint.
eta());
424 double newE_tot = newE_em + newE_had;
431 CaloTower rescaledTower(twrId, newE_em, newE_had, newE_outer, -1, -1, towerP4, emPoint, hadPoint);
433 rescaledTower.
setEcalTime(
int(ctcItr->ecalTime()*100.0 + 0.5) );
434 rescaledTower.
setHcalTime(
int(ctcItr->hcalTime()*100.0 + 0.5) );
442 for (
unsigned int iConst = 0; iConst < ctcItr->constituentsSize(); ++iConst) {
443 contains.push_back(ctcItr->constituent(iConst));
486 if (towerDetId.
null())
return;
492 tower29.numBadHcalCells += 1;
495 else if (0.5*energy >= threshold) {
498 if (towerDetId.
null())
return;
506 tower29.numRecHcalCells += 1;
510 tower29.numProbHcalCells += 1;
514 double e28 = 0.5 *
e;
515 double e29 = 0.5 *
e;
517 tower28.
E_had += e28;
519 std::pair<DetId,float> mc(detId,e28);
522 tower29.E_had += e29;
524 tower29.metaConstituents.push_back(mc);
532 tower29.hadSumTimeTimesE += ( e29 * recHit->
time() );
533 tower29.hadSumEForTime += e29;
538 tower29.E_outer += e29;
551 if (towerDetId.
null())
return;
558 else if (energy >= threshold) {
574 std::pair<DetId,float> mc(detId,e);
586 if (towerDetId.
null())
return;
591 else if (energy >= threshold) {
593 if (towerDetId.
null())
return;
596 if (hcalDetId.
depth() == 1) {
620 std::pair<DetId,float> mc(detId,e);
631 if (towerDetId.
null())
return;
635 else if (energy >= threshold) {
637 if (towerDetId.
null())
return;
665 std::pair<DetId,float> mc(detId,e);
679 unsigned int chStatusForCT;
680 bool ecalIsBad=
false;
700 bool passEmThreshold =
false;
705 else passEmThreshold = (energy >=
threshold);
711 else passEmThreshold = (energy >=
threshold);
715 if (towerDetId.
null())
return;
757 std::pair<DetId,float> mc(detId,e);
772 if (towerDetId.
null())
return;
802 std::pair<DetId, float> mc(detId, 0);
839 double E_had=mt.
E_had;
853 std::vector<std::pair<DetId,float> > metaContains_noecal;
855 for (std::vector<std::pair<DetId,float> >::iterator
i=metaContains.begin();
i!=metaContains.end(); ++
i)
856 if (
i->first.det()!=
DetId::Ecal) metaContains_noecal.push_back(*
i);
857 metaContains.swap(metaContains_noecal);
866 std::vector<std::pair<DetId,float> > metaContains_nohcal;
868 for (std::vector<std::pair<DetId,float> >::iterator
i=metaContains.begin();
i!=metaContains.end(); ++
i)
869 if (
i->first.det()!=
DetId::Hcal) metaContains_nohcal.push_back(*
i);
870 metaContains.swap(metaContains_nohcal);
873 if(metaContains.empty())
return;
891 double momEmDepth = 0.;
892 double momHadDepth = 0.;
893 if (
id.ietaAbs()<=17) {
927 emPoint =
emShwrPos(metaContains, momEmDepth, E_em);
935 if ( (E_had + E_outer) >0) {
936 massless = (E_em<=0);
1002 if unlikely ( (towerP4[3]==0) & (E_outer>0) ) {
1004 collection.emplace_back(
id, E_em, E_had, E_outer, -1, -1,
CaloTower::PolarLorentzVector(val,hadPoint.
eta(), hadPoint.
phi(),0), emPoint, hadPoint);
1006 collection.emplace_back(
id, E_em, E_had, E_outer, -1, -1,
GlobalVector(towerP4), towerP4[3], mass2, emPoint, hadPoint);
1008 auto & caloTower = collection.
back();
1034 unsigned int numBadEcalChan = 0;
1043 if (dropChItr !=
hcalDropChMap.end()) numBadHcalChan += dropChItr->second;
1100 caloTower.setCaloTowerStatus(numBadHcalChan, numBadEcalChan,
1101 numRecHcalChan, numRecEcalChan,
1102 numProbHcalChan, numProbEcalChan);
1104 double maxCellE = -999.0;
1107 contains.reserve(metaContains.size());
1108 for (std::vector<std::pair<DetId,float> >::iterator
i=metaContains.begin();
i!=metaContains.end(); ++
i) {
1110 contains.push_back(
i->first);
1112 if (maxCellE < i->
second) {
1120 maxCellE =
i->second;
1124 maxCellE =
i->second;
1132 caloTower.setConstituents(
std::move(contains));
1133 caloTower.setHottestCellE(maxCellE);
1203 else if(hcalDetId.
ieta() < 0) {
1218 if(hcalDetId.
depth() == 1) {
1236 edm::LogError(
"CaloTowersCreationAlgo") <<
"Bad cell: " << det << std::endl;
1285 if (fracDepth<=0)
return point;
1286 if (fracDepth>1) fracDepth=1;
1289 point += fracDepth * (backPoint-
point);
1301 float fracDepth,
double hadE) {
1313 std::vector<std::pair<DetId,float> >::const_iterator mc_it = metaContains.begin();
1314 for (; mc_it!=metaContains.end(); ++mc_it) {
1329 return GlobalPoint(hadX/nConst, hadY/nConst, hadZ/nConst);
1340 if (fracDepth < 0) fracDepth = 0;
1341 else if (fracDepth > 1) fracDepth = 1;
1345 int iEta = towerId.
ieta();
1346 int iPhi = towerId.
iphi();
1358 int frontDepth = 1000;
1359 int backDepth = -1000;
1360 for(
unsigned i = 0;
i < items.size();
i++){
1365 if(hid.
depth()<frontDepth) { frontCellId = hid; frontDepth = hid.
depth(); }
1366 if(hid.
depth()>backDepth) { backCellId = hid; backDepth = hid.
depth(); }
1373 for(
unsigned i = 0;
i < items28.size();
i++){
1378 if(hid.
depth()>backDepth) { backCellId = hid; backDepth = hid.
depth(); }
1399 point += fracDepth * (backPoint -
point);
1406 float fracDepth,
double emE) {
1416 std::vector<std::pair<DetId,float> >::const_iterator mc_it = metaContains.begin();
1417 for (; mc_it!=metaContains.end(); ++mc_it) {
1420 double e = mc_it->second;
1436 float fracDepth,
double emE) {
1443 double sumWeights = 0;
1445 double crystalThresh = 0.015 * emE;
1447 std::vector<std::pair<DetId,float> >::const_iterator mc_it = metaContains.begin();
1448 for (; mc_it!=metaContains.end(); ++mc_it) {
1449 if (mc_it->second < 0)
continue;
1450 if (mc_it->first.det() ==
DetId::Ecal && mc_it->second > crystalThresh) sumEmE += mc_it->second;
1453 for (mc_it = metaContains.begin(); mc_it!=metaContains.end(); ++mc_it) {
1455 if (mc_it->first.det() !=
DetId::Ecal || mc_it->second < crystalThresh)
continue;
1459 weight = 4.2 +
log(mc_it->second/sumEmE);
1467 return GlobalPoint(emX/sumWeights, emY/sumWeights, emZ/sumWeights);
1476 const float timeUnit = 0.01;
1478 if (time> 300.0)
return 30000;
1479 if (time< -300.0)
return -30000;
1481 return int(time/timeUnit + 0.5);
1502 for (std::vector<DetId>::iterator it = allChanInStatusCont.begin(); it!=allChanInStatusCont.end(); ++it) {
1548 for (std::vector<DetId>::iterator ac_it=allConstituents.begin();
1549 ac_it!=allConstituents.end(); ++ac_it) {
1584 const uint32_t recHitFlag = hit->
flags();
std::vector< double > theHBGrid
const CaloSubdetectorGeometry * getSubdetectorGeometry(const DetId &id) const
access the subdetector geometry for the given subdetector directly
bool theUseEtEETresholdFlag
const HcalChannelQuality * theHcalChStatus
size_t constituentsSize() const
const GlobalPoint & getBackPoint() const
bool contains(EventRange const &lh, EventID const &rh)
HcalSubdetector subdet() const
get the subdetector
EcalSeverityLevel::SeverityLevel severityLevel(const DetId &id) const
Evaluate status from id use channelStatus from DB.
int ietaAbs() const
get the absolute value of the tower ieta
const DetId & detid() const
DetId constituent(size_t i) const
void setHF1EScale(double scale)
void setCaloTowerStatus(unsigned int numBadHcalChan, unsigned int numBadEcalChan, unsigned int numRecHcalChan, unsigned int numRecEcalChan, unsigned int numProbHcalChan, unsigned int numProbEcalChan)
std::vector< double > theHESGrid
std::vector< double > theHEDGrid
GlobalPoint emCrystalShwrPos(DetId detId, float fracDepth)
void assignHitHcal(const CaloRecHit *recHit)
std::vector< int > theEcalSeveritiesToBeUsedInBadTowers
math::PtEtaPhiMLorentzVector PolarLorentzVector
Lorentz vector.
Geom::Phi< T > phi() const
Basic3DVector unit() const
Global3DPoint GlobalPoint
const DetId & detid() const
std::vector< HBHERecHit >::const_iterator const_iterator
GlobalPoint emShwrPos(const std::vector< std::pair< DetId, float > > &metaContains, float fracDepth, double totEmE)
void push_back(T const &t)
void setHF2EScale(double scale)
void finish(CaloTowerCollection &destCollection)
const Item * getValues(DetId fId, bool throwOnFail=true) const
std::vector< double > theHOWeights
MetaTower & find(const CaloTowerDetId &id)
looks for a given tower in the internal cache. If it can't find it, it makes it.
std::vector< double > theEEGrid
void rescale(const CaloTower *ct)
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
void setHcalSubdet(int lastHB, int lastHE, int lastHF, int lastHO)
void setHBEScale(double scale)
virtual const CaloCellGeometry * getGeometry(const DetId &id) const
Get the cell geometry of a given detector id. Should return false if not found.
std::vector< DetId > constituentsOf(const CaloTowerDetId &id) const
Get the constituent detids for this tower id ( not yet implemented )
std::vector< double > theEEWeights
std::vector< double > theHESWeights
U second(std::pair< T, U > const &p)
void setGeometry(const CaloTowerTopology *cttopo, const CaloTowerConstituentsMap *ctmap, const HcalTopology *htopo, const CaloGeometry *geo)
GlobalPoint hadShwrPos(const std::vector< std::pair< DetId, float > > &metaContains, float fracDepth, double hadE)
const CaloSubdetectorGeometry * theTowerGeometry
CaloTowerDetId detIdFromDenseIndex(uint32_t din) const
int depth() const
get the tower depth
void addConstituents(const std::vector< DetId > &ids)
unsigned int hcalChanStatusForCaloTower(const CaloRecHit *hit)
CaloTowerDetId towerOf(const DetId &id) const
Get the tower id for this det id (or null if not known)
std::vector< double > theHF2Grid
std::vector< double > theHEDWeights
unsigned int useRejectedRecoveredEcalHits
void rescaleTowers(const CaloTowerCollection &ctInput, CaloTowerCollection &ctResult)
static const int SubdetId
std::vector< DetId > getAllChannels() const
bool recoveredRecHit(const DetId &myid, const uint32_t &myflag) const
const CaloGeometry * theGeometry
int ieta() const
get the cell ieta
GlobalPoint emShwrLogWeightPos(const std::vector< std::pair< DetId, float > > &metaContains, float fracDepth, double totEmE)
int iphi() const
get the tower iphi
Abs< T >::type abs(const T &t)
std::vector< double > theHOGrid
void assignHitEcal(const EcalRecHit *recHit)
adds a single hit to the tower
bool dropChannel(const uint32_t &mystatus) const
void depthBinInformation(HcalSubdetector subdet, int etaRing, int &nDepthBins, int &startingBin) const
finds the number of depth bins and which is the number to start with
const CaloTowerConstituentsMap * theTowerConstituentsMap
double theHOthresholdPlus1
void convert(const CaloTowerDetId &id, const MetaTower &mt, CaloTowerCollection &collection)
const CaloTowerTopology * theTowerTopology
std::vector< double > theHF1Weights
int firstHEDoublePhiRing() const
GlobalPoint hadSegmentShwrPos(DetId detId, float fracDepth)
int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
std::vector< int > mergedDepths
bool theRecoveredHcalHitsAreUsed
unsigned towerId(DetId const &)
bool theHOIsUsed
only affects energy and ET calculation. HO is still recorded in the tower
void process(const HBHERecHitCollection &hbhe)
int ietaAbs() const
get the absolute value of the cell ieta
unsigned int useRejectedRecoveredHcalHits
const_iterator end() const
double theHOthresholdMinus2
std::vector< double > theHBWeights
const HcalSeverityLevelComputer * theHcalSevLvlComputer
void setHESEScale(double scale)
void setHEDEScale(double scale)
uint32_t denseIndex(const DetId &id) const
unsigned int theTowerMapSize
bool theUseSymEBTresholdFlag
void setEEEScale(double scale)
CaloTowerDetId id() const
void getDepthSegmentation(unsigned ring, std::vector< int > &readoutDepths) const
int compactTime(float time)
GlobalPoint hadShwPosFromCells(DetId frontCell, DetId backCell, float fracDepth)
bool null() const
is this a null id ?
int zside() const
get the z-side of the tower (1/-1)
void getThresholdAndWeight(const DetId &detId, double &threshold, double &weight) const
helper method to look up the appropriate threshold & weight
int getSeverityLevel(const DetId &myid, const uint32_t &myflag, const uint32_t &mystatus) const
const HcalTopology * theHcalTopology
std::vector< int > theEcalSeveritiesToBeExcluded
std::vector< unsigned short > ecalBadChs
void setHOEScale(double scale)
double theHOthresholdMinus1
const EcalSeverityLevelAlgo * theEcalSevLvlAlgo
const CaloCellGeometry * getGeometry(const DetId &id) const
Get the cell geometry of a given detector id.
std::vector< double > theHF1Grid
void reserve(size_type n)
int convertCTtoHcal(int ct_ieta) const
std::vector< double > theEBGrid
std::vector< double > theHF2Weights
volatile std::atomic< bool > shutdown_flag false
int ieta() const
get the tower ieta
bool theUseEtEBTresholdFlag
uint32_t getValue() const
unsigned int theHcalAcceptSeverityLevelForRejectedHit
std::tuple< unsigned int, bool > ecalChanStatusForCaloTower(const EcalRecHit *hit)
Detector det() const
get the detector field from this detid
const GlobalPoint & getPosition() const
Returns the position of reference for this cell.
const BasicVectorType & basicVector() const
HcalDropChMap hcalDropChMap
void setEBEScale(double scale)
std::vector< double > theEBWeights
double theHOthresholdPlus2
bool theRecoveredEcalHitsAreUsed
unsigned int theHcalAcceptSeverityLevel
bool theUseSymEETresholdFlag
uint32_t sizeForDenseIndexing() const
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point
double outerEnergy() const
const_iterator begin() const
const_reference back() const
Global3DVector GlobalVector
math::PtEtaPhiMLorentzVector PolarLorentzVector
Lorentz vector.