File indexing completed on 2025-08-05 08:13:28
0001 #include "MultiDetectorMultiplicity.h"
0002
0003
0004 #include <centrality/CentralityInfov1.h>
0005
0006
0007 #include <calobase/TowerInfov1.h>
0008 #include <calobase/TowerInfoContainerv1.h>
0009
0010 #include <phool/getClass.h>
0011 #include <phool/phool.h>
0012
0013
0014 #include <globalvertex/GlobalVertex.h>
0015 #include <globalvertex/GlobalVertexMap.h>
0016
0017
0018 #include <trackbase_historic/SvtxTrack.h>
0019 #include <trackbase_historic/SvtxTrackMap.h>
0020 #include <trackbase_historic/TrackSeedContainer.h>
0021 #include <trackbase/TrkrHitSet.h>
0022 #include <trackbase/TrkrHitSetContainer.h>
0023
0024
0025 #include <fun4all/Fun4AllReturnCodes.h>
0026
0027
0028 #include <TFile.h>
0029 #include <TH2F.h>
0030 #include <TH1I.h>
0031 #include <TTree.h>
0032
0033
0034 #include <string>
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044 MultiDetectorMultiplicity::MultiDetectorMultiplicity(const std::string &name, const std::string &filename)
0045 : SubsysReco(name)
0046 , _outfilename(filename)
0047 {
0048
0049
0050 }
0051
0052
0053
0054
0055
0056 MultiDetectorMultiplicity::~MultiDetectorMultiplicity()
0057 {
0058
0059 }
0060
0061
0062
0063
0064 int MultiDetectorMultiplicity::Init(PHCompositeNode *topNode)
0065 {
0066 if (Verbosity() > 5)
0067 {
0068 std::cout << "Beginning Init in MultiDetectorMultiplicity" << std::endl;
0069 }
0070
0071 initializeObjects();
0072
0073 return 0;
0074 }
0075
0076
0077
0078
0079
0080 int MultiDetectorMultiplicity::process_event(PHCompositeNode *topNode)
0081 {
0082 if (Verbosity() > 5)
0083 {
0084 std::cout << "Beginning process_event in MultiDetectorMultiplicity" << std::endl;
0085 }
0086
0087 float Ntracks = getFilteredNtracks(topNode);
0088 float MVTXclusters = getMVTXnclusters(topNode);
0089 float EMCalTotalEnergy = getEMCalTotalEnergy(topNode);
0090 float IHCalTotalEnergy = getIHCalTotalEnergy(topNode);
0091 float OHCalTotalEnergy = getOHCalTotalEnergy(topNode);
0092 float EPDTotalEnergy = getsEPDTotalEnergy(topNode);
0093
0094 bool acceptVertex = isVertexAccepted(topNode);
0095
0096 CentralityInfo* cent_node = findNode::getClass<CentralityInfo>(topNode, "CentralityInfo");
0097 if (!cent_node)
0098 {
0099 std::cout << "MultiDetectorMultiplicity::process_event - Error can not find centrality node " << std::endl;
0100 _SubsystemObjectsFail->Fill(OBJECT::CENTRALITY);
0101 return Fun4AllReturnCodes::ABORTEVENT;
0102 }
0103
0104 if(!acceptVertex) return Fun4AllReturnCodes::ABORTEVENT;
0105
0106 _mbd_centrality = cent_node->get_centile(CentralityInfo::PROP::mbd_NS);
0107 _epd_centrality = cent_node->get_centile(CentralityInfo::PROP::epd_NS);
0108
0109 _tracks_EMCALenergy->Fill(Ntracks, EMCalTotalEnergy);
0110 _tracks_IHCALenergy->Fill(Ntracks, IHCalTotalEnergy);
0111 _tracks_OHCALenergy->Fill(Ntracks, OHCalTotalEnergy);
0112 _tracks_AllCALenergy->Fill(Ntracks, EMCalTotalEnergy+IHCalTotalEnergy+OHCalTotalEnergy);
0113 _tracks_MVTXclusters->Fill(Ntracks, MVTXclusters);
0114
0115 _MVTXclusters_EMCALenergy->Fill(MVTXclusters, EMCalTotalEnergy);
0116 _MVTXclusters_IHCALenergy->Fill(MVTXclusters, IHCalTotalEnergy);
0117 _MVTXclusters_OHCALenergy->Fill(MVTXclusters, OHCalTotalEnergy);
0118 _MVTXclusters_AllCALenergy->Fill(MVTXclusters, EMCalTotalEnergy+IHCalTotalEnergy+OHCalTotalEnergy);
0119
0120 _EMCALenergy_IHCALenergy->Fill(EMCalTotalEnergy, IHCalTotalEnergy);
0121 _EMCALenergy_OHCALenergy->Fill(EMCalTotalEnergy, OHCalTotalEnergy);
0122 _IHCALenergy_OHCALenergy->Fill(IHCalTotalEnergy, OHCalTotalEnergy);
0123
0124 float centBinMBD = 100.-_mbd_centrality;
0125
0126 _MBDcentrality_tracks->Fill(centBinMBD, Ntracks);
0127 _MBDcentrality_MVTXclusters->Fill(centBinMBD, MVTXclusters);
0128 _MBDcentrality_EMCALenergy->Fill(centBinMBD, EMCalTotalEnergy);
0129 _MBDcentrality_IHCALenergy->Fill(centBinMBD, IHCalTotalEnergy);
0130 _MBDcentrality_OHCALenergy->Fill(centBinMBD, OHCalTotalEnergy);
0131 _MBDcentrality_AllCALenergy->Fill(centBinMBD, EMCalTotalEnergy+IHCalTotalEnergy+OHCalTotalEnergy);
0132 _MBDcentrality_EPDenergy->Fill(centBinMBD, EPDTotalEnergy);
0133
0134 float centBinEPD = 100.-_epd_centrality;
0135
0136 _EPDcentrality_tracks->Fill(centBinEPD, Ntracks);
0137 _EPDcentrality_MVTXclusters->Fill(centBinEPD, MVTXclusters);
0138 _EPDcentrality_EMCALenergy->Fill(centBinEPD, EMCalTotalEnergy);
0139 _EPDcentrality_IHCALenergy->Fill(centBinEPD, IHCalTotalEnergy);
0140 _EPDcentrality_OHCALenergy->Fill(centBinEPD, OHCalTotalEnergy);
0141 _EPDcentrality_AllCALenergy->Fill(centBinEPD, EMCalTotalEnergy+IHCalTotalEnergy+OHCalTotalEnergy);
0142 _EPDcentrality_EPDenergy->Fill(centBinEPD, EPDTotalEnergy);
0143
0144 _EPDcentrality_MBDcentrality->Fill(centBinEPD, centBinMBD);
0145
0146 _EPDenergy_tracks->Fill(EPDTotalEnergy, Ntracks);
0147 _EPDenergy_MVTXclusters->Fill(EPDTotalEnergy, MVTXclusters);
0148 _EPDenergy_EMCALenergy->Fill(EPDTotalEnergy, EMCalTotalEnergy);
0149 _EPDenergy_IHCALenergy->Fill(EPDTotalEnergy, IHCalTotalEnergy);
0150 _EPDenergy_OHCALenergy->Fill(EPDTotalEnergy, OHCalTotalEnergy);
0151 _EPDenergy_AllCALenergy->Fill(EPDTotalEnergy, EMCalTotalEnergy+IHCalTotalEnergy+OHCalTotalEnergy);
0152
0153 return Fun4AllReturnCodes::EVENT_OK;
0154 }
0155
0156
0157
0158
0159
0160 int MultiDetectorMultiplicity::End(PHCompositeNode *topNode)
0161 {
0162 if (Verbosity() > 1)
0163 {
0164 std::cout << "Ending MultiDetectorMultiplicity analysis package" << std::endl;
0165 }
0166
0167
0168 _outfile->cd();
0169
0170
0171 _tracks_EMCALenergy->Write();
0172 _tracks_IHCALenergy->Write();
0173 _tracks_OHCALenergy->Write();
0174 _tracks_AllCALenergy->Write();
0175 _tracks_MVTXclusters->Write();
0176
0177 _MVTXclusters_EMCALenergy->Write();
0178 _MVTXclusters_IHCALenergy->Write();
0179 _MVTXclusters_OHCALenergy->Write();
0180 _MVTXclusters_AllCALenergy->Write();
0181
0182 _EMCALenergy_IHCALenergy->Write();
0183 _EMCALenergy_OHCALenergy->Write();
0184 _IHCALenergy_OHCALenergy->Write();
0185
0186 _MBDcentrality_tracks->Write();
0187 _MBDcentrality_MVTXclusters->Write();
0188 _MBDcentrality_EMCALenergy->Write();
0189 _MBDcentrality_IHCALenergy->Write();
0190 _MBDcentrality_OHCALenergy->Write();
0191 _MBDcentrality_AllCALenergy->Write();
0192 _MBDcentrality_EPDenergy->Write();
0193
0194 _EPDcentrality_tracks->Write();
0195 _EPDcentrality_MVTXclusters->Write();
0196 _EPDcentrality_EMCALenergy->Write();
0197 _EPDcentrality_IHCALenergy->Write();
0198 _EPDcentrality_OHCALenergy->Write();
0199 _EPDcentrality_AllCALenergy->Write();
0200 _EPDcentrality_EPDenergy->Write();
0201
0202 _EPDcentrality_MBDcentrality->Write();
0203
0204 _EPDenergy_tracks->Write();
0205 _EPDenergy_MVTXclusters->Write();
0206 _EPDenergy_EMCALenergy->Write();
0207 _EPDenergy_IHCALenergy->Write();
0208 _EPDenergy_OHCALenergy->Write();
0209 _EPDenergy_AllCALenergy->Write();
0210
0211 _SubsystemObjectsFail->Write();
0212
0213 _outfile->Close();
0214
0215
0216 delete _outfile;
0217
0218 if (Verbosity() > 1)
0219 {
0220 std::cout << "Finished MultiDetectorMultiplicity analysis package" << std::endl;
0221 }
0222
0223 return 0;
0224 }
0225
0226 void MultiDetectorMultiplicity::initializeObjects()
0227 {
0228 _outfile = new TFile(_outfilename.c_str(), "RECREATE");
0229
0230 _tracks_EMCALenergy = new TH2F("tracks_EMCALenergy", ";Track multiplicity;EMCal Energy (GeV)",_nbins,0.,_track_bin_max,_nbins,0.,_emcal_bin_max);
0231 _tracks_IHCALenergy = new TH2F("tracks_IHCALenergy", ";Track multiplicity;IHCal Energy (GeV)",_nbins,0.,_track_bin_max,_nbins,0.,_ihcal_bin_max);
0232 _tracks_OHCALenergy = new TH2F("tracks_OHCALenergy", ";Track multiplicity;OHCal Energy (GeV)",_nbins,0.,_track_bin_max,_nbins,0.,_ohcal_bin_max);
0233 _tracks_AllCALenergy = new TH2F("tracks_AllCALenergy", ";Track multiplicity;EMCal+IHCal+OHCal Energy (GeV)",_nbins,0.,_track_bin_max,_nbins,0.,_allcal_bin_max);
0234 _tracks_MVTXclusters = new TH2F("tracks_MVTXclusters", ";Track multiplicity;MVTX cluster multiplicity",_nbins,0.,_track_bin_max,_nbins,0.,_mvtx_bin_max);
0235
0236 _MVTXclusters_EMCALenergy = new TH2F("MVTXclusters_EMCALenergy", ";MVTX cluster multiplicity;EMCal Energy (GeV)",_nbins,0.,_mvtx_bin_max,_nbins,0.,_emcal_bin_max);
0237 _MVTXclusters_IHCALenergy = new TH2F("MVTXclusters_IHCALenergy", ";MVTX cluster multiplicity;IHCal Energy (GeV)",_nbins,0.,_mvtx_bin_max,_nbins,0.,_ihcal_bin_max);
0238 _MVTXclusters_OHCALenergy = new TH2F("MVTXclusters_OHCALenergy", ";MVTX cluster multiplicity;OHCal Energy (GeV)",_nbins,0.,_mvtx_bin_max,_nbins,0.,_ohcal_bin_max);
0239 _MVTXclusters_AllCALenergy = new TH2F("MVTXclusters_AllCALenergy", ";MVTX cluster multiplicity;EMCal+IHCal+OHCal Energy (GeV)",_nbins,0.,_mvtx_bin_max,_nbins,0.,_allcal_bin_max);
0240
0241 _EMCALenergy_IHCALenergy = new TH2F("EMCALenergy_IHCALenergy", ";EMCal Energy (GeV);IHCal Energy (GeV)",_nbins,0.,_emcal_bin_max,_nbins,0.,_ihcal_bin_max);
0242 _EMCALenergy_OHCALenergy = new TH2F("EMCALenergy_OHCALenergy", ";EMCal Energy (GeV);OHCal Energy (GeV)",_nbins,0.,_emcal_bin_max,_nbins,0.,_ohcal_bin_max);
0243 _IHCALenergy_OHCALenergy = new TH2F("IHCALenergy_OHCALenergy", ";IHCal Energy (GeV);OHCal Energy (GeV)",_nbins,0.,_ihcal_bin_max,_nbins,0.,_ohcal_bin_max);
0244
0245 _MBDcentrality_tracks = new TH2F("MBDcentrality_tracks", ";MBD Centrality;Track multiplicity",10,0.,100.,_nbins,0.,_track_bin_max);
0246 setCentralityHistoLabel(_MBDcentrality_tracks);
0247
0248 _MBDcentrality_MVTXclusters = new TH2F("MBDcentrality_MVTXclusters", ";MBD Centrality;MVTX cluster multiplicity",10,0.,100.,_nbins,0.,_mvtx_bin_max);
0249 setCentralityHistoLabel(_MBDcentrality_MVTXclusters);
0250
0251 _MBDcentrality_EMCALenergy = new TH2F("MBDcentrality_EMCALenergy", ";MBD Centrality;EMCal Energy (GeV)",10,0.,100.,_nbins,0.,_emcal_bin_max);
0252 setCentralityHistoLabel(_MBDcentrality_EMCALenergy);
0253
0254 _MBDcentrality_IHCALenergy = new TH2F("MBDcentrality_IHCALenergy", ";MBD Centrality;IHCal Energy (GeV)",10,0.,100.,_nbins,0.,_ihcal_bin_max);
0255 setCentralityHistoLabel(_MBDcentrality_IHCALenergy);
0256
0257 _MBDcentrality_OHCALenergy = new TH2F("MBDcentrality_OHCALenergy", ";MBD Centrality;OHCal Energy (GeV)",10,0.,100.,_nbins,0.,_ohcal_bin_max);
0258 setCentralityHistoLabel(_MBDcentrality_OHCALenergy);
0259
0260 _MBDcentrality_AllCALenergy = new TH2F("MBDcentrality_AllCALenergy", ";MBD Centrality;EMCal+IHCal+OHCal Energy (GeV)",10,0.,100.,_nbins,0.,_allcal_bin_max);
0261 setCentralityHistoLabel(_MBDcentrality_AllCALenergy);
0262
0263 _MBDcentrality_EPDenergy = new TH2F("MBDcentrality_EPDenergy", ";MBD Centrality;EPD Energy (GeV)",10,0.,100.,_nbins,0.,_epd_bin_max);
0264 setCentralityHistoLabel(_MBDcentrality_EPDenergy);
0265
0266 _EPDcentrality_tracks = new TH2F("EPDcentrality_tracks", ";EPD Centrality;Track multiplicity",10,0.,100.,_nbins,0.,_track_bin_max);
0267 setCentralityHistoLabel(_EPDcentrality_tracks);
0268
0269 _EPDcentrality_MVTXclusters = new TH2F("EPDcentrality_MVTXclusters", ";EPD Centrality;MVTX cluster multiplicity",10,0.,100.,_nbins,0.,_mvtx_bin_max);
0270 setCentralityHistoLabel(_EPDcentrality_MVTXclusters);
0271
0272 _EPDcentrality_EMCALenergy = new TH2F("EPDcentrality_EMCALenergy", ";EPD Centrality;EMCal Energy (GeV)",10,0.,100.,_nbins,0.,_emcal_bin_max);
0273 setCentralityHistoLabel(_EPDcentrality_EMCALenergy);
0274
0275 _EPDcentrality_IHCALenergy = new TH2F("EPDcentrality_IHCALenergy", ";EPD Centrality;IHCal Energy (GeV)",10,0.,100.,_nbins,0.,_ihcal_bin_max);
0276 setCentralityHistoLabel(_EPDcentrality_IHCALenergy);
0277
0278 _EPDcentrality_OHCALenergy = new TH2F("EPDcentrality_OHCALenergy", ";EPD Centrality;OHCal Energy (GeV)",10,0.,100.,_nbins,0.,_ohcal_bin_max);
0279 setCentralityHistoLabel(_EPDcentrality_OHCALenergy);
0280
0281 _EPDcentrality_AllCALenergy = new TH2F("EPDcentrality_AllCALenergy", ";EPD Centrality;EMCal+IHCal+OHCal Energy (GeV)",10,0.,100.,_nbins,0.,_allcal_bin_max);
0282 setCentralityHistoLabel(_EPDcentrality_AllCALenergy);
0283
0284 _EPDcentrality_EPDenergy = new TH2F("EPDcentrality_EPDenergy", ";EPD Centrality;EPD Energy (GeV)",10,0.,100.,_nbins,0.,_epd_bin_max);
0285 setCentralityHistoLabel(_EPDcentrality_EPDenergy);
0286
0287 _EPDcentrality_MBDcentrality = new TH2F("EPDcentrality_MBDcentrality", ";EPD Centrality;MBD Centrality",10,0.,100.,10,0.,100);
0288 setCentralityHistoLabel(_EPDcentrality_MBDcentrality, true);
0289
0290 _EPDenergy_tracks = new TH2F("EPDenergy_tracks", ";EPD Energy (GeV);Track multiplicity",_nbins,0.,_epd_bin_max,_nbins,0.,_track_bin_max);
0291 _EPDenergy_MVTXclusters = new TH2F("EPDenergy_MVTXclusters", ";EPD Energy (GeV);MVTX cluster multiplicity",_nbins,0.,_epd_bin_max,_nbins,0.,_mvtx_bin_max);
0292 _EPDenergy_EMCALenergy = new TH2F("EPDenergy_EMCALenergy", ";EPD Energy (GeV);EMCal Energy (GeV)",_nbins,0.,_epd_bin_max,_nbins,0.,_emcal_bin_max);
0293 _EPDenergy_IHCALenergy = new TH2F("EPDenergy_IHCALenergy", ";EPD Energy (GeV);IHCal Energy (GeV)",_nbins,0.,_epd_bin_max,_nbins,0.,_ihcal_bin_max);
0294 _EPDenergy_OHCALenergy = new TH2F("EPDenergy_OHCALenergy", ";EPD Energy (GeV);OHCal Energy (GeV)",_nbins,0.,_epd_bin_max,_nbins,0.,_ohcal_bin_max);
0295 _EPDenergy_AllCALenergy = new TH2F("EPDenergy_AllCALenergy", ";EPD Energy (GeV);EMCal+IHCal+OHCal Energy (GeV)",_nbins,0.,_epd_bin_max,_nbins,0.,_allcal_bin_max);
0296
0297
0298
0299
0300 _SubsystemObjectsFail = new TH1I("SubsystemObjectsFail", "Times objects were NOT found;;Entries",8,0.,8.);
0301
0302 _SubsystemObjectsFail->GetXaxis()->SetBinLabel(1,"Vertex");
0303 _SubsystemObjectsFail->GetXaxis()->SetBinLabel(2,"Centrality");
0304 _SubsystemObjectsFail->GetXaxis()->SetBinLabel(3,"Tracks");
0305 _SubsystemObjectsFail->GetXaxis()->SetBinLabel(4,"MVTX clusters");
0306 _SubsystemObjectsFail->GetXaxis()->SetBinLabel(5,"EMCal towers");
0307 _SubsystemObjectsFail->GetXaxis()->SetBinLabel(6,"IHCal towers");
0308 _SubsystemObjectsFail->GetXaxis()->SetBinLabel(7,"OHCal towers");
0309 _SubsystemObjectsFail->GetXaxis()->SetBinLabel(8,"sEPD towers");
0310
0311 }
0312
0313 float MultiDetectorMultiplicity::getFilteredNtracks(PHCompositeNode *topNode)
0314 {
0315 SvtxTrackMap *trackmap = findNode::getClass<SvtxTrackMap>(topNode, "SvtxTrackMap");
0316
0317 if (!trackmap)
0318 {
0319 std::cout << PHWHERE
0320 << "SvtxTrackMap node is missing, can't collect tracks"
0321 << std::endl;
0322 _SubsystemObjectsFail->Fill(OBJECT::TRACKS);
0323 return -1;
0324 }
0325
0326 float Ntracks = 0;
0327
0328 for(SvtxTrackMap::Iter iter = trackmap->begin(); iter != trackmap->end(); ++iter)
0329 {
0330 SvtxTrack* track = iter->second;
0331 float quality = track->get_quality();
0332
0333 if (quality > 10) continue;
0334
0335
0336
0337
0338
0339
0340
0341 auto silicon_seed = track->get_silicon_seed();
0342 auto tpc_seed = track->get_tpc_seed();
0343 int nsiliconhits = 0;
0344
0345 int nTPChits = 0;
0346
0347
0348
0349 if(tpc_seed)
0350 {
0351 for (TrackSeed::ConstClusterKeyIter iter = tpc_seed->begin_cluster_keys(); iter != tpc_seed->end_cluster_keys(); ++iter)
0352 {
0353 TrkrDefs::cluskey cluster_key = *iter;
0354 unsigned int layer = TrkrDefs::getLayer(cluster_key);
0355 if (_nlayers_tpc > 0 && layer >= (_nlayers_maps + _nlayers_intt) && layer < (_nlayers_maps + _nlayers_intt + _nlayers_tpc))
0356 {
0357 nTPChits++;
0358 }
0359 }
0360 }
0361
0362 if (silicon_seed)
0363 {
0364 for (TrackSeed::ConstClusterKeyIter iter = silicon_seed->begin_cluster_keys(); iter != silicon_seed->end_cluster_keys(); ++iter)
0365 {
0366 TrkrDefs::cluskey cluster_key = *iter;
0367 unsigned int layer = TrkrDefs::getLayer(cluster_key);
0368 if (_nlayers_tpc > 0 && layer >= (_nlayers_maps + _nlayers_intt) && layer < (_nlayers_maps + _nlayers_intt + _nlayers_tpc))
0369 {
0370 nTPChits++;
0371 }
0372 }
0373 nsiliconhits = silicon_seed->size_cluster_keys();
0374 }
0375
0376 if(nTPChits < 20) continue;
0377
0378 if (nsiliconhits < 2) continue;
0379
0380 Ntracks += 1.;
0381 }
0382
0383 return Ntracks;
0384 }
0385
0386 float MultiDetectorMultiplicity::getMVTXnclusters(PHCompositeNode *topNode)
0387 {
0388 TrkrClusterContainer *MVTXclusterMap = findNode::getClass<TrkrClusterContainer>(topNode,"TRKR_CLUSTER");
0389
0390 if(!MVTXclusterMap)
0391 {
0392 std::cout << PHWHERE
0393 << "TRKR_CLUSTER node is missing, can't collect hits"
0394 << std::endl;
0395 _SubsystemObjectsFail->Fill(OBJECT::MVTXCLUSTERS);
0396 return -1;
0397 }
0398
0399 float MVTXclusters = 0.;
0400
0401 for(const auto& hitsetkey : MVTXclusterMap->getHitSetKeys(TrkrDefs::TrkrId::mvtxId))
0402 {
0403 auto range = MVTXclusterMap->getClusters(hitsetkey);
0404 for( auto clusIter = range.first; clusIter != range.second; ++clusIter )
0405 {
0406 const auto cluster = clusIter->second;
0407
0408 if(!cluster) continue;
0409
0410 MVTXclusters += 1.;
0411
0412 }
0413 }
0414
0415 return MVTXclusters;
0416
0417 }
0418
0419 float MultiDetectorMultiplicity::getEMCalTotalEnergy(PHCompositeNode *topNode)
0420 {
0421 TowerInfoContainer *towerinfosEM = findNode::getClass<TowerInfoContainer>(topNode, "TOWERINFO_CALIB_CEMC");
0422
0423 if(!towerinfosEM)
0424 {
0425 std::cout << PHWHERE
0426 << "TOWERINFO_CALIB_CEMC node is missing, can't collect EMCal towers"
0427 << std::endl;
0428 _SubsystemObjectsFail->Fill(OBJECT::EMCALTOWERS);
0429 return -1.;
0430 }
0431
0432 float EMCalTotalEnergy = 0.;
0433
0434 TowerInfo *towerInfo = nullptr;
0435 for(unsigned int i = 0; i < towerinfosEM->size(); i++)
0436 {
0437 towerInfo = towerinfosEM->get_tower_at_channel(i);
0438 EMCalTotalEnergy += towerInfo->get_energy();
0439 }
0440
0441 return EMCalTotalEnergy;
0442 }
0443
0444 float MultiDetectorMultiplicity::getIHCalTotalEnergy(PHCompositeNode *topNode)
0445 {
0446 TowerInfoContainer *towerinfosIH = findNode::getClass<TowerInfoContainer>(topNode, "TOWERINFO_CALIB_HCALIN");
0447
0448 if(!towerinfosIH)
0449 {
0450 std::cout << PHWHERE
0451 << "TOWERINFO_CALIB_HCALIN node is missing, can't collect IHCal towers"
0452 << std::endl;
0453 _SubsystemObjectsFail->Fill(OBJECT::IHCALTOWERS);
0454 return -1.;
0455 }
0456
0457 float IHCalTotalEnergy = 0.;
0458
0459 TowerInfo *towerInfo = nullptr;
0460 for(unsigned int i = 0; i < towerinfosIH->size(); i++)
0461 {
0462 towerInfo = towerinfosIH->get_tower_at_channel(i);
0463 IHCalTotalEnergy += towerInfo->get_energy();
0464 }
0465
0466 return IHCalTotalEnergy;
0467 }
0468
0469 float MultiDetectorMultiplicity::getOHCalTotalEnergy(PHCompositeNode *topNode)
0470 {
0471 TowerInfoContainer *towerinfosOH = findNode::getClass<TowerInfoContainer>(topNode, "TOWERINFO_CALIB_HCALOUT");
0472
0473 if(!towerinfosOH)
0474 {
0475 std::cout << PHWHERE
0476 << "TOWERINFO_CALIB_HCALOUT node is missing, can't collect OHCal towers"
0477 << std::endl;
0478 _SubsystemObjectsFail->Fill(OBJECT::OHCALTOWERS);
0479 return -1.;
0480 }
0481
0482 float OHCalTotalEnergy = 0.;
0483
0484 TowerInfo *towerInfo = nullptr;
0485 for(unsigned int i = 0; i < towerinfosOH->size(); i++)
0486 {
0487 towerInfo = towerinfosOH->get_tower_at_channel(i);
0488 OHCalTotalEnergy += towerInfo->get_energy();
0489 }
0490
0491 return OHCalTotalEnergy;
0492 }
0493
0494 float MultiDetectorMultiplicity::getsEPDTotalEnergy(PHCompositeNode *topNode)
0495 {
0496 TowerInfoContainer *towerinfosEPD = findNode::getClass<TowerInfoContainer>(topNode, "TOWERINFO_CALIB_EPD");
0497
0498 if(!towerinfosEPD)
0499 {
0500 std::cout << PHWHERE
0501 << "TOWERINFO_CALIB_EPD node is missing, can't collect sEPD towers"
0502 << std::endl;
0503 _SubsystemObjectsFail->Fill(OBJECT::EPDTOWERS);
0504 return -1.;
0505 }
0506
0507 float EPDTotalEnergy = 0.;
0508
0509 TowerInfo *towerInfo = nullptr;
0510 for(unsigned int i = 0; i < towerinfosEPD->size(); i++)
0511 {
0512 towerInfo = towerinfosEPD->get_tower_at_channel(i);
0513 EPDTotalEnergy += towerInfo->get_energy();
0514 }
0515
0516 return EPDTotalEnergy;
0517 }
0518
0519 void MultiDetectorMultiplicity::setCentralityHistoLabel(TH2 *histo, bool doYaxisLabels)
0520 {
0521 for(int i = 0; i < 10; i++)
0522 {
0523 histo->GetXaxis()->SetBinLabel(i+1,Form("%d-%d%%",90-(i*10),100-(i*10)));
0524 if(doYaxisLabels) histo->GetYaxis()->SetBinLabel(i+1,Form("%d-%d%%",90-(i*10),100-(i*10)));
0525 }
0526 }
0527
0528 bool MultiDetectorMultiplicity::isVertexAccepted(PHCompositeNode *topNode)
0529 {
0530 GlobalVertexMap *vertexmap = findNode::getClass<GlobalVertexMap>(topNode, "GlobalVertexMap");
0531 if (!vertexmap)
0532 {
0533 std::cout << "GlobalVertexMap node is missing. Event aborted!" << std::endl;
0534 _SubsystemObjectsFail->Fill(OBJECT::VERTEX);
0535 return false;
0536 }
0537
0538 if (vertexmap->empty())
0539 {
0540 std::cout << "GlobalVertexMap node is empty. Event aborted!" << std::endl;
0541 _SubsystemObjectsFail->Fill(OBJECT::VERTEX);
0542 return false;
0543 }
0544
0545 GlobalVertex *vtx = vertexmap->begin()->second;
0546 if (vtx == nullptr)
0547 {
0548 _SubsystemObjectsFail->Fill(OBJECT::VERTEX);
0549 return false;
0550 }
0551
0552 if(std::abs(vtx->get_z()) > _zVertexAcceptance) return false;
0553
0554 return true;
0555 }