18 g4InfoLabel(ps.getParameter<
std::
string>(
"moduleLabelG4")),
31 if ( verbose_ ) { dbe_->setVerbose(1); }
32 else { dbe_->setVerbose(0); }
36 if ( verbose_ ) dbe_->showDirStructure();
66 for (
int myStep = 0; myStep<26; myStep++) {
eRLength[myStep] = 0.0; }
71 dbe_->setCurrentFolder(
"EcalHitsV/EcalSimHitsValidation");
73 sprintf (histo,
"EB hits multiplicity" ) ;
74 menEBHits_ = dbe_->book1D(histo, histo, 50, 0., 5000.) ;
76 sprintf (histo,
"EB crystals multiplicity" ) ;
79 sprintf (histo,
"EB occupancy" ) ;
80 meEBOccupancy_ = dbe_->book2D(histo, histo, 360, 0., 360., 170, -85., 85.);
82 sprintf (histo,
"EB longitudinal shower profile" ) ;
85 sprintf (histo,
"EB hits energy spectrum" );
88 sprintf (histo,
"EB hits log10energy spectrum" );
91 sprintf (histo,
"EB hits log10energy spectrum vs normalized energy" );
94 sprintf (histo,
"EB hits log10energy spectrum vs normalized energy25" );
97 sprintf (histo,
"EB hits energy spectrum 2" );
100 sprintf (histo,
"EB crystal energy spectrum" );
103 sprintf (histo,
"EB crystal energy spectrum 2" );
106 sprintf (histo,
"EB E1" ) ;
107 meEBe1_ = dbe_->book1D(histo, histo, 400, 0., 400.);
109 sprintf (histo,
"EB E4" ) ;
110 meEBe4_ = dbe_->book1D(histo, histo, 400, 0., 400.);
112 sprintf (histo,
"EB E9" ) ;
113 meEBe9_ = dbe_->book1D(histo, histo, 400, 0., 400.);
115 sprintf (histo,
"EB E16" ) ;
116 meEBe16_ = dbe_->book1D(histo, histo, 400, 0., 400.);
118 sprintf (histo,
"EB E25" ) ;
119 meEBe25_ = dbe_->book1D(histo, histo, 400, 0., 400.);
121 sprintf (histo,
"EB E1oE4" ) ;
122 meEBe1oe4_ = dbe_->book1D(histo, histo, 100, 0.4, 1.1);
124 sprintf (histo,
"EB E1oE9" ) ;
125 meEBe1oe9_ = dbe_->book1D(histo, histo, 100, 0.4, 1.1);
127 sprintf (histo,
"EB E4oE9" ) ;
128 meEBe4oe9_ = dbe_->book1D(histo, histo, 100, 0.4, 1.1);
130 sprintf (histo,
"EB E9oE16" ) ;
131 meEBe9oe16_ = dbe_->book1D(histo, histo, 100, 0.4, 1.1);
133 sprintf (histo,
"EB E1oE25" ) ;
134 meEBe1oe25_ = dbe_->book1D(histo, histo, 100, 0.4, 1.1);
136 sprintf (histo,
"EB E9oE25" ) ;
137 meEBe9oe25_ = dbe_->book1D(histo, histo, 100, 0.4, 1.1);
139 sprintf (histo,
"EB E16oE25" ) ;
140 meEBe16oe25_ = dbe_->book1D(histo, histo, 100, 0.4, 1.1);
167 if( ! EcalHitsEB.
isValid() )
return;
172 std::vector<PCaloHit> theEBCaloHits;
173 theEBCaloHits.insert(theEBCaloHits.end(), EcalHitsEB->begin(), EcalHitsEB->end());
177 double EBEnergy_ = 0.;
178 std::map<unsigned int, std::vector<PCaloHit*>,std::less<unsigned int> > CaloHitMap;
185 std::vector<double> econtr(140, 0. );
186 std::vector<double> econtr25(140, 0. );
189 uint32_t nEBHits = 0;
191 for (std::vector<PCaloHit>::iterator isim = theEBCaloHits.begin();
192 isim != theEBCaloHits.end(); ++isim){
194 if ( isim->time() > 500. ) {
continue; }
196 CaloHitMap[ isim->id()].push_back( &(*isim) );
201 <<
" CaloHit " << isim->getName() <<
"\n" 202 <<
" DetID = " << isim->id() <<
" EBDetId = " << ebid.ieta() <<
" " << ebid.iphi() <<
"\n" 203 <<
" Time = " << isim->time() <<
"\n" 204 <<
" Track Id = " << isim->geantTrackId() <<
"\n" 205 <<
" Energy = " << isim->energy();
209 uint32_t crystid = ebid.rawId();
210 ebmap[crystid] += isim->energy();
212 EBEnergy_ += isim->energy();
215 if( isim->energy() > 0 ) {
217 int log10i =
int( ( log10(isim->energy()) + 10. ) * 10. );
218 if( log10i >=0 && log10i < 140 ) econtr[log10i] += isim->energy();
226 for (
std::map<uint32_t,
float,std::less<uint32_t> >::iterator it = ebmap.begin(); it != ebmap.end(); ++it )
meEBcrystalEnergy_->
Fill((*it).second);
239 int by = myEBid.
iphi();
240 int bz = myEBid.
zside();
248 std::vector<uint32_t> ids25; ids25 =
getIdsAroundMax(5,5,bx,by,bz,ebmap);
250 for(
unsigned i=0;
i<25;
i++ ) {
251 for(
unsigned int j=0; j<CaloHitMap[ids25[
i]].size(); j++ ) {
252 if( CaloHitMap[ids25[
i]][j]->energy() > 0 ) {
253 int log10i =
int( ( log10( CaloHitMap[ids25[
i]][j]->energy()) + 10. ) * 10. );
254 if( log10i >=0 && log10i < 140 ) econtr25[log10i] += CaloHitMap[ids25[
i]][j]->energy();
278 for(
int i=0;
i<140;
i++ ) {
284 for(
int i=0;
i<140;
i++ ) {
293 if( MyPEcalValidInfo.
isValid() ) {
294 if ( MyPEcalValidInfo->
eb1x1() > 0. ) {
295 std::vector<float> BX0 = MyPEcalValidInfo->
bX0();
297 for (
int myStep=0; myStep< 26; myStep++ ) {
306 int centralEta,
int centralPhi,
307 int centralZ,
MapType& themap){
310 float totalEnergy = 0.;
312 int goBackInEta = nCellInEta/2;
313 int goBackInPhi = nCellInPhi/2;
314 int startEta = centralZ*centralEta-goBackInEta;
315 int startPhi = centralPhi-goBackInPhi;
317 for (
int ieta=startEta; ieta<startEta+nCellInEta; ieta++) {
318 for (
int iphi=startPhi; iphi<startPhi+nCellInPhi; iphi++) {
321 if (
abs(ieta) > 85 ||
abs(ieta)<1 ) {
continue; }
322 if (iphi< 1) { index =
EBDetId(ieta,iphi+360).
rawId(); }
323 else if(iphi>360) { index =
EBDetId(ieta,iphi-360).
rawId(); }
326 totalEnergy += themap[
index];
332 << nCellInEta <<
" x " << nCellInPhi
333 <<
" EB matrix energy = " << totalEnergy
334 <<
" for " << ncristals <<
" crystals" ;
342 std::vector<uint32_t> ids( nCellInEta*nCellInPhi );
344 int goBackInEta = nCellInEta/2;
345 int goBackInPhi = nCellInPhi/2;
346 int startEta = centralZ*centralEta-goBackInEta;
347 int startPhi = centralPhi-goBackInPhi;
349 for (
int ieta=startEta; ieta<startEta+nCellInEta; ieta++) {
350 for (
int iphi=startPhi; iphi<startPhi+nCellInPhi; iphi++) {
353 if (
abs(ieta) > 85 ||
abs(ieta)<1 ) {
continue; }
354 if (iphi< 1) { index =
EBDetId(ieta,iphi+360).
rawId(); }
355 else if(iphi>360) { index =
EBDetId(ieta,iphi-360).
rawId(); }
357 ids[ncristals] =
index;
367 int CentralEta,
int CentralPhi,
int CentralZ,
370 int goBackInEta = nCellInEta/2;
371 int goBackInPhi = nCellInPhi/2;
373 int startEta = CentralZ*CentralEta - goBackInEta;
374 int startPhi = CentralPhi - goBackInPhi;
377 for (
int ieta = startEta; ieta < startEta+nCellInEta; ieta ++ ) {
378 for(
int iphi = startPhi; iphi < startPhi + nCellInPhi; iphi++ ) {
380 if (
abs(ieta) > 85 ||
abs(ieta)<1 ) {
continue; }
381 if (iphi< 1) { index =
EBDetId(ieta,iphi+360).
rawId(); }
382 else if(iphi>360) { index =
EBDetId(ieta,iphi-360).
rawId(); }
384 fillmap[i++] = themap[
index];
390 if ( fillmap[i/2] == themap[ebcenterid] )
398 float e012 = themap[0]+themap[1]+themap[2];
399 float e036 = themap[0]+themap[3]+themap[6];
400 float e678 = themap[6]+themap[7]+themap[8];
401 float e258 = themap[2]+themap[5]+themap[8];
403 if ( (e012>e678 || e012==e678) && (e036>e258 || e036==e258))
404 return E22=themap[0]+themap[1]+themap[3]+themap[4];
405 else if ( (e012>e678 || e012==e678) && (e036<e258 || e036==e258) )
406 return E22=themap[1]+themap[2]+themap[4]+themap[5];
407 else if ( (e012<e678 || e012==e678) && (e036>e258 || e036==e258))
408 return E22=themap[3]+themap[4]+themap[6]+themap[7];
409 else if ( (e012<e678|| e012==e678) && (e036<e258|| e036==e258) )
410 return E22=themap[4]+themap[5]+themap[7]+themap[8];
418 float e0_4 = themap[0]+themap[1]+themap[2]+themap[3]+themap[4];
419 float e0_20 = themap[0]+themap[5]+themap[10]+themap[15]+themap[20];
420 float e4_24 = themap[4]+themap[9]+themap[14]+themap[19]+themap[24];
421 float e0_24 = themap[20]+themap[21]+themap[22]+themap[23]+themap[24];
423 if ((e0_4>e0_24 || e0_4==e0_24) && (e0_20>e4_24|| e0_20==e4_24))
424 return E44=e33+themap[0]+themap[1]+themap[2]+themap[3]+themap[5]+themap[10]+themap[15];
425 else if ((e0_4>e0_24 || e0_4==e0_24) && (e0_20<e4_24 || e0_20==e4_24))
426 return E44=e33+themap[1]+themap[2]+themap[3]+themap[4]+themap[9]+themap[14]+themap[19];
427 else if ((e0_4<e0_24|| e0_4==e0_24) && (e0_20>e4_24 || e0_20==e4_24))
428 return E44=e33+themap[5]+themap[10]+themap[15]+themap[20]+themap[21]+themap[22]+themap[23];
429 else if ((e0_4<e0_24|| e0_4==e0_24) && (e0_20<e4_24 || e0_20==e4_24))
430 return E44=e33+themap[21]+themap[22]+themap[23]+themap[24]+themap[9]+themap[14]+themap[19];
439 uint32_t unitWithMaxEnergy = 0;
442 MapType::iterator iter;
443 for (iter = themap.begin(); iter != themap.end(); iter++) {
445 if (maxEnergy < (*iter).second) {
446 maxEnergy = (*iter).second;
447 unitWithMaxEnergy = (*iter).first;
452 <<
" max energy of " << maxEnergy
453 <<
" GeV in Unit id " << unitWithMaxEnergy;
454 return unitWithMaxEnergy;
EventNumber_t event() const
T getUntrackedParameter(std::string const &, T const &) const
std::map< uint32_t, float, std::less< uint32_t > > MapType
std::vector< uint32_t > getIdsAroundMax(int nCellInEta, int nCellInPhi, int centralEta, int centralPhi, int centralZ, MapType &themap)
MonitorElement * meEBhitLog10Energy_
MonitorElement * meEBe16oe25_
MonitorElement * meEBe16_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
void endJob(void) override
MonitorElement * meEBe9oe16_
MonitorElement * meEBe1oe9_
constexpr uint32_t rawId() const
get the raw id
MonitorElement * meEBhitLog10EnergyNorm_
MonitorElement * meEBe9oe25_
MonitorElement * menEBCrystals_
MonitorElement * meEBe25_
MonitorElement * meEBhitLog10Energy25Norm_
MonitorElement * menEBHits_
int iphi() const
get the crystal iphi
float eCluster4x4(float e33, MapType &themap)
MonitorElement * meEBe1oe4_
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
std::string ValidationCollection
MonitorElement * meEBLongitudinalShower_
~EcalBarrelSimHitsValidation() override
Destructor.
Abs< T >::type abs(const T &t)
edm::EDGetTokenT< edm::PCaloHitContainer > EBHitsToken
void Reset()
reset ME (ie. contents, errors, etc)
edm::EDGetTokenT< PEcalValidInfo > ValidationCollectionToken
MonitorElement * meEBe4oe9_
uint32_t getUnitWithMaxEnergy(MapType &themap)
Namespace of DDCMS conversion namespace.
virtual float energyInMatrixEB(int nCellInEta, int nCellInPhi, int centralEta, int centralPhi, int centralZ, MapType &themap)
MonitorElement * meEBcrystalEnergy2_
std::string EBHitsCollection
MonitorElement * meEBhitEnergy2_
float eCluster2x2(MapType &themap)
bool fillEBMatrix(int nCellInEta, int nCellInPhi, int CentralEta, int CentralPhi, int CentralZ, MapType &fillmap, MapType &themap)
MonitorElement * meEBOccupancy_
int ietaAbs() const
get the absolute value of the crystal ieta
void analyze(const edm::Event &e, const edm::EventSetup &c) override
Analyze.
MonitorElement * meEBcrystalEnergy_
MonitorElement * meEBhitEnergy_
int zside() const
get the z-side of the crystal (1/-1)
EcalBarrelSimHitsValidation(const edm::ParameterSet &ps)
Constructor.
MonitorElement * meEBe1oe25_