static Bool_t is_in_eta_fiducial(const TVector3 &pos) { // converted from emid::is_in_eta_fiducial // NOTE: this routine assumes pos is in local coordinates! //convert pos to local coordinate system //TVector3 v = toLocal(pos); // cryostat edges bool is_at_edge; if (TMath::Abs(pos.Z())>150.) { is_at_edge=pos.Perp()>EC_R_MAX; } else { is_at_edge=fabs(pos.Z())>CC_Z_MAX; } return (!is_at_edge); }
//////////////////////////////////////////////////////////////////////////////////// //Missing momentum vector histo filling///////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// void TrigGlobalBranch::FillMissMomHistos(){ TVector3 lvSumTemp; int imom, icent; float centralityTemp = -1.; centralityTemp = AssignCentrality(Fcal_Et); icent = indexCentrality(centralityTemp); imom = 0; lvSumTemp = MissMom(500.0); hMissPt[imom]->Fill(lvSumTemp.Perp()); hMissPx[imom]->Fill(lvSumTemp.Px()); hMissPy[imom]->Fill(lvSumTemp.Py()); hMissPtCent[imom][icent]->Fill(lvSumTemp.Perp()); hMissPxCent[imom][icent]->Fill(lvSumTemp.Px()); hMissPyCent[imom][icent]->Fill(lvSumTemp.Py()); ++imom; lvSumTemp = MissMom(700.0); hMissPt[imom]->Fill(lvSumTemp.Perp()); hMissPx[imom]->Fill(lvSumTemp.Px()); hMissPy[imom]->Fill(lvSumTemp.Py()); hMissPtCent[imom][icent]->Fill(lvSumTemp.Perp()); hMissPxCent[imom][icent]->Fill(lvSumTemp.Px()); hMissPyCent[imom][icent]->Fill(lvSumTemp.Py()); ++imom; lvSumTemp = MissMom(1000.0); hMissPt[imom]->Fill(lvSumTemp.Perp()); hMissPx[imom]->Fill(lvSumTemp.Px()); hMissPy[imom]->Fill(lvSumTemp.Py()); hMissPtCent[imom][icent]->Fill(lvSumTemp.Perp()); hMissPxCent[imom][icent]->Fill(lvSumTemp.Px()); hMissPyCent[imom][icent]->Fill(lvSumTemp.Py()); ++imom; lvSumTemp = MissMom(2000.0); hMissPt[imom]->Fill(lvSumTemp.Perp()); hMissPx[imom]->Fill(lvSumTemp.Px()); hMissPy[imom]->Fill(lvSumTemp.Py()); hMissPtCent[imom][icent]->Fill(lvSumTemp.Perp()); hMissPxCent[imom][icent]->Fill(lvSumTemp.Px()); hMissPyCent[imom][icent]->Fill(lvSumTemp.Py()); ++imom; lvSumTemp = MissMom(3000.0); hMissPt[imom]->Fill(lvSumTemp.Perp()); hMissPx[imom]->Fill(lvSumTemp.Px()); hMissPy[imom]->Fill(lvSumTemp.Py()); hMissPtCent[imom][icent]->Fill(lvSumTemp.Perp()); hMissPxCent[imom][icent]->Fill(lvSumTemp.Px()); hMissPyCent[imom][icent]->Fill(lvSumTemp.Py()); ++imom; lvSumTemp = MissMom(4000.0); hMissPt[imom]->Fill(lvSumTemp.Perp()); hMissPx[imom]->Fill(lvSumTemp.Px()); hMissPy[imom]->Fill(lvSumTemp.Py()); hMissPtCent[imom][icent]->Fill(lvSumTemp.Perp()); hMissPxCent[imom][icent]->Fill(lvSumTemp.Px()); hMissPyCent[imom][icent]->Fill(lvSumTemp.Py()); ++imom; lvSumTemp = MissMom(5000.0); hMissPt[imom]->Fill(lvSumTemp.Perp()); hMissPx[imom]->Fill(lvSumTemp.Px()); hMissPy[imom]->Fill(lvSumTemp.Py()); hMissPtCent[imom][icent]->Fill(lvSumTemp.Perp()); hMissPxCent[imom][icent]->Fill(lvSumTemp.Px()); hMissPyCent[imom][icent]->Fill(lvSumTemp.Py()); ++imom; lvSumTemp = MissMom(6000.0); hMissPt[imom]->Fill(lvSumTemp.Perp()); hMissPx[imom]->Fill(lvSumTemp.Px()); hMissPy[imom]->Fill(lvSumTemp.Py()); hMissPtCent[imom][icent]->Fill(lvSumTemp.Perp()); hMissPxCent[imom][icent]->Fill(lvSumTemp.Px()); hMissPyCent[imom][icent]->Fill(lvSumTemp.Py()); ++imom; lvSumTemp = MissMom(7000.0); hMissPt[imom]->Fill(lvSumTemp.Perp()); hMissPx[imom]->Fill(lvSumTemp.Px()); hMissPy[imom]->Fill(lvSumTemp.Py()); hMissPtCent[imom][icent]->Fill(lvSumTemp.Perp()); hMissPxCent[imom][icent]->Fill(lvSumTemp.Px()); hMissPyCent[imom][icent]->Fill(lvSumTemp.Py()); ++imom; lvSumTemp = MissMom(10000.0); hMissPt[imom]->Fill(lvSumTemp.Perp()); hMissPx[imom]->Fill(lvSumTemp.Px()); hMissPy[imom]->Fill(lvSumTemp.Py()); hMissPtCent[imom][icent]->Fill(lvSumTemp.Perp()); hMissPxCent[imom][icent]->Fill(lvSumTemp.Px()); hMissPyCent[imom][icent]->Fill(lvSumTemp.Py()); ++imom; lvSumTemp = MissMom(15000.0); hMissPt[imom]->Fill(lvSumTemp.Perp()); hMissPx[imom]->Fill(lvSumTemp.Px()); hMissPy[imom]->Fill(lvSumTemp.Py()); hMissPtCent[imom][icent]->Fill(lvSumTemp.Perp()); hMissPxCent[imom][icent]->Fill(lvSumTemp.Px()); hMissPyCent[imom][icent]->Fill(lvSumTemp.Py()); }
int QAG4SimulationCalorimeter::process_event_G4Hit(PHCompositeNode *topNode) { if (verbosity > 2) cout << "QAG4SimulationCalorimeter::process_event_G4Hit() entered" << endl; TH1F* h = nullptr; Fun4AllHistoManager *hm = QAHistManagerDef::getHistoManager(); assert(hm); TH1D* h_norm = dynamic_cast<TH1D*>(hm->getHisto( get_histo_prefix() + "_Normalization")); assert(h_norm); // get primary assert(_truth_container); PHG4TruthInfoContainer::ConstRange primary_range = _truth_container->GetPrimaryParticleRange(); double total_primary_energy = 1e-9; //make it zero energy epsilon samll so it can be used for denominator for (PHG4TruthInfoContainer::ConstIterator particle_iter = primary_range.first; particle_iter != primary_range.second; ++particle_iter) { const PHG4Particle *particle = particle_iter->second; assert(particle); total_primary_energy += particle->get_e(); } assert(not _truth_container->GetMap().empty()); const PHG4Particle * last_primary = _truth_container->GetMap().rbegin()->second; assert(last_primary); if (verbosity > 2) { cout << "QAG4SimulationCalorimeter::process_event_G4Hit() handle this truth particle" << endl; last_primary->identify(); } const PHG4VtxPoint* primary_vtx = // _truth_container->GetPrimaryVtx(last_primary->get_vtx_id()); assert(primary_vtx); if (verbosity > 2) { cout << "QAG4SimulationCalorimeter::process_event_G4Hit() handle this vertex" << endl; primary_vtx->identify(); } const double t0 = primary_vtx->get_t(); const TVector3 vertex(primary_vtx->get_x(), primary_vtx->get_y(), primary_vtx->get_z()); // projection axis TVector3 axis_proj(last_primary->get_px(), last_primary->get_py(), last_primary->get_pz()); if (axis_proj.Mag() == 0) axis_proj.SetXYZ(0, 0, 1); axis_proj = axis_proj.Unit(); // azimuthal direction axis TVector3 axis_azimuth = axis_proj.Cross(TVector3(0, 0, 1)); if (axis_azimuth.Mag() == 0) axis_azimuth.SetXYZ(1, 0, 0); axis_azimuth = axis_azimuth.Unit(); // polar direction axis TVector3 axis_polar = axis_proj.Cross(axis_azimuth); assert(axis_polar.Mag() > 0); axis_polar = axis_polar.Unit(); double e_calo = 0.0; // active energy deposition double ev_calo = 0.0; // visible energy double ea_calo = 0.0; // absorber energy double ev_calo_em = 0.0; // EM visible energy if (_calo_hit_container) { TH2F * hrz = dynamic_cast<TH2F*>(hm->getHisto( get_histo_prefix() + "_G4Hit_RZ")); assert(hrz); TH2F * hxy = dynamic_cast<TH2F*>(hm->getHisto( get_histo_prefix() + "_G4Hit_XY")); assert(hxy); TH1F * ht = dynamic_cast<TH1F*>(hm->getHisto( get_histo_prefix() + "_G4Hit_HitTime")); assert(ht); TH2F * hlat = dynamic_cast<TH2F*>(hm->getHisto( get_histo_prefix() + "_G4Hit_LateralTruthProjection")); assert(hlat); h_norm->Fill("G4Hit Active", _calo_hit_container->size()); PHG4HitContainer::ConstRange calo_hit_range = _calo_hit_container->getHits(); for (PHG4HitContainer::ConstIterator hit_iter = calo_hit_range.first; hit_iter != calo_hit_range.second; hit_iter++) { PHG4Hit *this_hit = hit_iter->second; assert(this_hit); e_calo += this_hit->get_edep(); ev_calo += this_hit->get_light_yield(); // EM visible energy that is only associated with electron energy deposition PHG4Particle* particle = _truth_container->GetParticle( this_hit->get_trkid()); if (!particle) { cout <<__PRETTY_FUNCTION__<<" - Error - this PHG4hit missing particle: "; this_hit -> identify(); } assert(particle); if (abs(particle->get_pid()) == 11) ev_calo_em += this_hit->get_light_yield(); const TVector3 hit(this_hit->get_avg_x(), this_hit->get_avg_y(), this_hit->get_avg_z()); hrz->Fill(hit.Z(), hit.Perp(), this_hit->get_edep()); hxy->Fill(hit.X(), hit.Y(), this_hit->get_edep()); ht->Fill(this_hit->get_avg_t() - t0, this_hit->get_edep()); const double hit_azimuth = axis_azimuth.Dot(hit - vertex); const double hit_polar = axis_polar.Dot(hit - vertex); hlat->Fill(hit_polar, hit_azimuth, this_hit->get_edep()); } } if (_calo_abs_hit_container) { h_norm->Fill("G4Hit Absor.", _calo_abs_hit_container->size()); PHG4HitContainer::ConstRange calo_abs_hit_range = _calo_abs_hit_container->getHits(); for (PHG4HitContainer::ConstIterator hit_iter = calo_abs_hit_range.first; hit_iter != calo_abs_hit_range.second; hit_iter++) { PHG4Hit *this_hit = hit_iter->second; assert(this_hit); ea_calo += this_hit->get_edep(); } } if (verbosity > 3) cout << "QAG4SimulationCalorimeter::process_event_G4Hit::" << _calo_name << " - SF = " << e_calo / (e_calo + ea_calo + 1e-9) << ", VSF = " << ev_calo / (e_calo + ea_calo + 1e-9) << endl; if (e_calo + ea_calo > 0) { h = dynamic_cast<TH1F*>(hm->getHisto(get_histo_prefix() + "_G4Hit_SF")); assert(h); h->Fill(e_calo / (e_calo + ea_calo)); h = dynamic_cast<TH1F*>(hm->getHisto(get_histo_prefix() + "_G4Hit_VSF")); assert(h); h->Fill(ev_calo / (e_calo + ea_calo)); } h = dynamic_cast<TH1F*>(hm->getHisto( get_histo_prefix() + "_G4Hit_FractionTruthEnergy")); assert(h); h->Fill((e_calo + ea_calo) / total_primary_energy); if (ev_calo > 0) { h = dynamic_cast<TH1F*>(hm->getHisto( get_histo_prefix() + "_G4Hit_FractionEMVisibleEnergy")); assert(h); h->Fill(ev_calo_em / (ev_calo)); } if (verbosity > 3) cout << "QAG4SimulationCalorimeter::process_event_G4Hit::" << _calo_name << " - histogram " << h->GetName() << " Get Sum = " << h->GetSum() << endl; return Fun4AllReturnCodes::EVENT_OK; }