Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-06 08:17:47

0001 #include "TowerJetInput.h"
0002 
0003 #include "Jet.h"
0004 #include "Jetv2.h"
0005 
0006 #include <calobase/RawTower.h>
0007 #include <calobase/RawTowerContainer.h>
0008 #include <calobase/RawTowerDefs.h>  // for encode_towerid
0009 #include <calobase/RawTowerGeom.h>
0010 #include <calobase/RawTowerGeomContainer.h>
0011 #include <calobase/TowerInfo.h>
0012 #include <calobase/TowerInfoContainer.h>
0013 #include <globalvertex/GlobalVertex.h>
0014 #include <globalvertex/GlobalVertexMap.h>
0015 
0016 #include <phool/getClass.h>
0017 
0018 #include <cassert>
0019 #include <cmath>  // for asinh, atan2, cos, cosh
0020 #include <iostream>
0021 #include <map>      // for _Rb_tree_const_iterator
0022 #include <utility>  // for pair
0023 #include <vector>
0024 
0025 TowerJetInput::TowerJetInput(Jet::SRC input, const std::string &prefix)
0026   : m_input(input)
0027   , m_towerNodePrefix(prefix)
0028 {
0029 }
0030 
0031 void TowerJetInput::identify(std::ostream &os)
0032 {
0033   os << "   TowerJetInput: ";
0034   if (m_input == Jet::CEMC_TOWER)
0035   {
0036     os << "TOWER_CEMC to Jet::CEMC_TOWER";
0037   }
0038   else if (m_input == Jet::EEMC_TOWER)
0039   {
0040     os << "TOWER_EEMC to Jet::EEMC_TOWER";
0041   }
0042   else if (m_input == Jet::HCALIN_TOWER)
0043   {
0044     os << "TOWER_HCALIN to Jet::HCALIN_TOWER";
0045   }
0046   else if (m_input == Jet::HCALOUT_TOWER)
0047   {
0048     os << "TOWER_HCALOUT to Jet::HCALOUT_TOWER";
0049   }
0050   else if (m_input == Jet::FEMC_TOWER)
0051   {
0052     os << "TOWER_FEMC to Jet::FEMC_TOWER";
0053   }
0054   else if (m_input == Jet::FHCAL_TOWER)
0055   {
0056     os << "TOWER_FHCAL to Jet::FHCAL_TOWER";
0057   }
0058   os << std::endl;
0059 }
0060 
0061 std::vector<Jet *> TowerJetInput::get_input(PHCompositeNode *topNode)
0062 {
0063   if (Verbosity() > 0)
0064   {
0065     std::cout << "TowerJetInput::process_event -- entered" << std::endl;
0066   }
0067   float vtxz = 0;  // default to 0
0068   GlobalVertexMap *vertexmap = findNode::getClass<GlobalVertexMap>(topNode, "GlobalVertexMap");
0069   if (!vertexmap)
0070   {
0071     std::cout << "TowerJetInput::get_input - Fatal Error - GlobalVertexMap node is missing. Please turn on the do_global flag in the main macro in order to reconstruct the global vertex." << std::endl;
0072     assert(vertexmap);  // force quit
0073 
0074     return std::vector<Jet *>();
0075   }
0076   if (vertexmap->empty())
0077   {
0078     if (Verbosity() > 0)
0079     {
0080       std::cout << "TowerJetInput::get_input - empty vertex map, continuing as if zvtx = 0" << std::endl;
0081     }
0082   }
0083   else
0084   {
0085     GlobalVertex *vtx = vertexmap->begin()->second;
0086     if (vtx)
0087     {
0088       if (m_use_vertextype)
0089       {
0090         auto typeStartIter = vtx->find_vertexes(m_vertex_type);
0091         auto typeEndIter = vtx->end_vertexes();
0092         for (auto iter = typeStartIter; iter != typeEndIter; ++iter)
0093         {
0094           const auto &[type, vertexVec] = *iter;
0095           if (type != m_vertex_type)
0096           {
0097             continue;
0098           }
0099           for (const auto *vertex : vertexVec)
0100           {
0101             if (!vertex)
0102             {
0103               continue;
0104             }
0105             vtxz = vertex->get_z();
0106           }
0107         }
0108       }
0109       else
0110       {
0111         vtxz = vtx->get_z();
0112       }
0113     }
0114   }
0115   if (std::isnan(vtxz))
0116   {
0117     static bool once = true;
0118     if (once)
0119     {
0120       once = false;
0121       std::cout << "TowerJetInput::get_input - WARNING - vertex is NAN. Continue with zvtx = 0 (further vertex warning will be suppressed)." << std::endl;
0122     }
0123     vtxz = 0;
0124   }
0125 
0126   if (std::abs(vtxz) > 1e3)  // code crashes with very large z vertex, so skip these events
0127   {
0128     static bool once = true;
0129     if (once)
0130     {
0131       once = false;
0132 
0133       std::cout << "TowerJetInput::get_input - WARNING - vertex is " << vtxz << ". Set vtxz = 0 (further vertex warning will be suppressed)." << std::endl;
0134     }
0135     vtxz = 0;
0136   }
0137 
0138   m_use_towerinfo = false;
0139 
0140   /* std::string name =(m_input == Jet::CEMC_TOWER ? "CEMC_TOWER" */
0141   /*                        : m_input == Jet::CEMC_TOWERINFO ? "CEMC_TOWERINFO" */
0142   /*                        : m_input == Jet::EEMC_TOWER ? "Jet::EEMC_TOWER" */
0143   /*                        : m_input == Jet::HCALIN_TOWER ? "Jet::HCALIN_TOWER" */
0144   /*                        : m_input == Jet::HCALIN_TOWERINFO ? "Jet::HCALIN_TOWERINFO" */
0145   /*                        : m_input == Jet::HCALOUT_TOWER ? "Jet::HCALOUT_TOWER" */
0146   /*                        : m_input == Jet::HCALOUT_TOWERINFO ? "Jet::HCALOUT_TOWERINFO" */
0147   /*                        : m_input == Jet::FEMC_TOWER ? "Jet::FEMC_TOWER" */
0148   /*                        : m_input == Jet::FHCAL_TOWER ? "Jet::FHCAL_TOWER" */
0149   /*                        : m_input == Jet::CEMC_TOWER_RETOWER ? "Jet::CEMC_TOWER_RETOWER" */
0150   /*                        : m_input == Jet::CEMC_TOWERINFO_RETOWER ? "Jet::CEMC_TOWERINFO_RETOWER" */
0151   /*                        : m_input == Jet::CEMC_TOWER_SUB1 ? "Jet::CEMC_TOWER_SUB1" */
0152   /*                        : m_input == Jet::CEMC_TOWERINFO_SUB1 ? "Jet::CEMC_TOWERINFO_SUB1" */
0153   /*                        : m_input == Jet::HCALIN_TOWER_SUB1 ? "Jet::HCALIN_TOWER_SUB1" */
0154   /*                        : m_input == Jet::HCALIN_TOWERINFO_SUB1 ? "Jet::HCALIN_TOWERINFO_SUB1" */
0155   /*                        : m_input == Jet::HCALOUT_TOWER_SUB1 ? "Jet::HCALOUT_TOWER_SUB1" */
0156   /*                        : m_input == Jet::HCALOUT_TOWERINFO_SUB1 ? "Jet::HCALOUT_TOWERINFO_SUB1" */
0157   /*                        : m_input == Jet::CEMC_TOWER_SUB1CS ? "Jet::CEMC_TOWER_SUB1CS" */
0158   /*                        : m_input == Jet::HCALIN_TOWER_SUB1CS ? "Jet::HCALIN_TOWER_SUB1CS" */
0159   /*                        : m_input == Jet::HCALOUT_TOWER_SUB1CS ? "Jet::HCALOUT_TOWER_SUB1CS" */
0160   /*                        : "NO NAME"); */
0161   /* std::cout << " TowerJetInput (" << name << ")" << std::endl; */
0162 
0163   RawTowerContainer *towers = nullptr;
0164   TowerInfoContainer *towerinfos = nullptr;
0165   RawTowerGeomContainer *geom = nullptr;
0166   RawTowerGeomContainer *EMCal_geom = nullptr;
0167 
0168   if (m_input == Jet::CEMC_TOWER)
0169   {
0170     towers = findNode::getClass<RawTowerContainer>(topNode, "TOWER_CALIB_CEMC");
0171     geom = findNode::getClass<RawTowerGeomContainer>(topNode, "TOWERGEOM_CEMC");
0172     if ((!towers) || !geom)
0173     {
0174       return std::vector<Jet *>();
0175     }
0176   }
0177   else if (m_input == Jet::CEMC_TOWERINFO)
0178   {
0179     m_use_towerinfo = true;
0180     towerName = m_towerNodePrefix + "_CEMC";
0181     towerinfos = findNode::getClass<TowerInfoContainer>(topNode, towerName);
0182     geom = findNode::getClass<RawTowerGeomContainer>(topNode, "TOWERGEOM_CEMC");
0183     geocaloid = RawTowerDefs::CalorimeterId::CEMC;
0184     if ((!towerinfos) || !geom)
0185     {
0186       return std::vector<Jet *>();
0187     }
0188   }
0189   else if (m_input == Jet::CEMC_TOWERINFO_EMBED)
0190   {
0191     m_use_towerinfo = true;
0192     towerName = m_towerNodePrefix + "_EMBED_CEMC";
0193     towerinfos = findNode::getClass<TowerInfoContainer>(topNode, towerName);
0194     geom = findNode::getClass<RawTowerGeomContainer>(topNode, "TOWERGEOM_CEMC");
0195     geocaloid = RawTowerDefs::CalorimeterId::CEMC;
0196     if ((!towerinfos) || !geom)
0197     {
0198       return std::vector<Jet *>();
0199     }
0200   }
0201   else if (m_input == Jet::CEMC_TOWERINFO_SIM)
0202   {
0203     m_use_towerinfo = true;
0204     towerName = m_towerNodePrefix + "_SIM_CEMC";
0205     towerinfos = findNode::getClass<TowerInfoContainer>(topNode, towerName);
0206     geom = findNode::getClass<RawTowerGeomContainer>(topNode, "TOWERGEOM_CEMC");
0207     geocaloid = RawTowerDefs::CalorimeterId::CEMC;
0208     if ((!towerinfos) || !geom)
0209     {
0210       return std::vector<Jet *>();
0211     }
0212   }
0213   else if (m_input == Jet::EEMC_TOWER)
0214   {
0215     towers = findNode::getClass<RawTowerContainer>(topNode, "TOWER_CALIB_EEMC");
0216     geom = findNode::getClass<RawTowerGeomContainer>(topNode, "TOWERGEOM_EEMC");
0217     if ((!towers && !towerinfos) || !geom)
0218     {
0219       return std::vector<Jet *>();
0220     }
0221   }
0222   else if (m_input == Jet::HCALIN_TOWER)
0223   {
0224     towers = findNode::getClass<RawTowerContainer>(topNode, "TOWER_CALIB_HCALIN");
0225     geom = findNode::getClass<RawTowerGeomContainer>(topNode, "TOWERGEOM_HCALIN");
0226     if ((!towers) || !geom)
0227     {
0228       return std::vector<Jet *>();
0229     }
0230   }
0231   else if (m_input == Jet::HCALIN_TOWERINFO)
0232   {
0233     m_use_towerinfo = true;
0234     towerName = m_towerNodePrefix + "_HCALIN";
0235     towerinfos = findNode::getClass<TowerInfoContainer>(topNode, towerName);
0236     geocaloid = RawTowerDefs::CalorimeterId::HCALIN;
0237     geom = findNode::getClass<RawTowerGeomContainer>(topNode, "TOWERGEOM_HCALIN");
0238     if ((!towerinfos) || !geom)
0239     {
0240       return std::vector<Jet *>();
0241     }
0242   }
0243   else if (m_input == Jet::HCALIN_TOWERINFO_EMBED)
0244   {
0245     m_use_towerinfo = true;
0246     towerName = m_towerNodePrefix + "_EMBED_HCALIN";
0247     towerinfos = findNode::getClass<TowerInfoContainer>(topNode, towerName);
0248     geom = findNode::getClass<RawTowerGeomContainer>(topNode, "TOWERGEOM_HCALIN");
0249     geocaloid = RawTowerDefs::CalorimeterId::HCALIN;
0250     if ((!towerinfos) || !geom)
0251     {
0252       return std::vector<Jet *>();
0253     }
0254   }
0255   else if (m_input == Jet::HCALIN_TOWERINFO_SIM)
0256   {
0257     m_use_towerinfo = true;
0258     towerName = m_towerNodePrefix + "_SIM_HCALIN";
0259     towerinfos = findNode::getClass<TowerInfoContainer>(topNode, towerName);
0260     geom = findNode::getClass<RawTowerGeomContainer>(topNode, "TOWERGEOM_HCALIN");
0261     geocaloid = RawTowerDefs::CalorimeterId::HCALIN;
0262     if ((!towerinfos) || !geom)
0263     {
0264       return std::vector<Jet *>();
0265     }
0266   }
0267   else if (m_input == Jet::HCALOUT_TOWER)
0268   {
0269     towers = findNode::getClass<RawTowerContainer>(topNode, "TOWER_CALIB_HCALOUT");
0270     geom = findNode::getClass<RawTowerGeomContainer>(topNode, "TOWERGEOM_HCALOUT");
0271     if ((!towers) || !geom)
0272     {
0273       return std::vector<Jet *>();
0274     }
0275   }
0276   else if (m_input == Jet::HCALOUT_TOWERINFO)
0277   {
0278     m_use_towerinfo = true;
0279     towerName = m_towerNodePrefix + "_HCALOUT";
0280     towerinfos = findNode::getClass<TowerInfoContainer>(topNode, towerName);
0281     geocaloid = RawTowerDefs::CalorimeterId::HCALOUT;
0282     geom = findNode::getClass<RawTowerGeomContainer>(topNode, "TOWERGEOM_HCALOUT");
0283     if ((!towerinfos) || !geom)
0284     {
0285       return std::vector<Jet *>();
0286     }
0287   }
0288   else if (m_input == Jet::HCALOUT_TOWERINFO_EMBED)
0289   {
0290     m_use_towerinfo = true;
0291     towerName = m_towerNodePrefix + "_EMBED_HCALOUT";
0292     towerinfos = findNode::getClass<TowerInfoContainer>(topNode, towerName);
0293     geom = findNode::getClass<RawTowerGeomContainer>(topNode, "TOWERGEOM_HCALOUT");
0294     geocaloid = RawTowerDefs::CalorimeterId::HCALOUT;
0295     if ((!towerinfos) || !geom)
0296     {
0297       return std::vector<Jet *>();
0298     }
0299   }
0300   else if (m_input == Jet::HCALOUT_TOWERINFO_SIM)
0301   {
0302     m_use_towerinfo = true;
0303     towerName = m_towerNodePrefix + "_SIM_HCALOUT";
0304     towerinfos = findNode::getClass<TowerInfoContainer>(topNode, towerName);
0305     geom = findNode::getClass<RawTowerGeomContainer>(topNode, "TOWERGEOM_HCALOUT");
0306     geocaloid = RawTowerDefs::CalorimeterId::HCALOUT;
0307     if ((!towerinfos) || !geom)
0308     {
0309       return std::vector<Jet *>();
0310     }
0311   }
0312 
0313   else if (m_input == Jet::FEMC_TOWER)
0314   {
0315     towers = findNode::getClass<RawTowerContainer>(topNode, "TOWER_CALIB_FEMC");
0316     geom = findNode::getClass<RawTowerGeomContainer>(topNode, "TOWERGEOM_FEMC");
0317     if ((!towers) || !geom)
0318     {
0319       return std::vector<Jet *>();
0320     }
0321   }
0322   else if (m_input == Jet::FHCAL_TOWER)
0323   {
0324     towers = findNode::getClass<RawTowerContainer>(topNode, "TOWER_CALIB_FHCAL");
0325     geom = findNode::getClass<RawTowerGeomContainer>(topNode, "TOWERGEOM_FHCAL");
0326     if ((!towers) || !geom)
0327     {
0328       return std::vector<Jet *>();
0329     }
0330   }
0331   else if (m_input == Jet::CEMC_TOWER_RETOWER)
0332   {
0333     towers = findNode::getClass<RawTowerContainer>(topNode, "TOWER_CALIB_CEMC_RETOWER");
0334     geom = findNode::getClass<RawTowerGeomContainer>(topNode, "TOWERGEOM_HCALIN");
0335     if ((!towers) || !geom)
0336     {
0337       return std::vector<Jet *>();
0338     }
0339   }
0340   else if (m_input == Jet::CEMC_TOWERINFO_RETOWER)
0341   {
0342     m_use_towerinfo = true;
0343     towerName = m_towerNodePrefix + "_CEMC_RETOWER";
0344     towerinfos = findNode::getClass<TowerInfoContainer>(topNode, towerName);
0345     geocaloid = RawTowerDefs::CalorimeterId::HCALIN;
0346     geom = findNode::getClass<RawTowerGeomContainer>(topNode, "TOWERGEOM_HCALIN");
0347     if ((!towerinfos) || !geom)
0348     {
0349       return std::vector<Jet *>();
0350     }
0351   }
0352   else if (m_input == Jet::CEMC_TOWER_SUB1)
0353   {
0354     towers = findNode::getClass<RawTowerContainer>(topNode, "TOWER_CALIB_CEMC_RETOWER_SUB1");
0355     geom = findNode::getClass<RawTowerGeomContainer>(topNode, "TOWERGEOM_HCALIN");
0356     if ((!towers) || !geom)
0357     {
0358       return std::vector<Jet *>();
0359     }
0360   }
0361   else if (m_input == Jet::CEMC_TOWERINFO_SUB1)
0362   {
0363     m_use_towerinfo = true;
0364     towerName = m_towerNodePrefix + "_CEMC_RETOWER_SUB1";
0365     towerinfos = findNode::getClass<TowerInfoContainer>(topNode, towerName);
0366     geocaloid = RawTowerDefs::CalorimeterId::HCALIN;
0367     geom = findNode::getClass<RawTowerGeomContainer>(topNode, "TOWERGEOM_HCALIN");
0368     if ((!towerinfos) || !geom)
0369     {
0370       return std::vector<Jet *>();
0371     }
0372   }
0373   else if (m_input == Jet::HCALIN_TOWER_SUB1)
0374   {
0375     towers = findNode::getClass<RawTowerContainer>(topNode, "TOWER_CALIB_HCALIN_SUB1");
0376     geom = findNode::getClass<RawTowerGeomContainer>(topNode, "TOWERGEOM_HCALIN");
0377     if ((!towers) || !geom)
0378     {
0379       return std::vector<Jet *>();
0380     }
0381   }
0382   else if (m_input == Jet::HCALIN_TOWERINFO_SUB1)
0383   {
0384     m_use_towerinfo = true;
0385     towerName = m_towerNodePrefix + "_HCALIN_SUB1";
0386     towerinfos = findNode::getClass<TowerInfoContainer>(topNode, towerName);
0387     geocaloid = RawTowerDefs::CalorimeterId::HCALIN;
0388     geom = findNode::getClass<RawTowerGeomContainer>(topNode, "TOWERGEOM_HCALIN");
0389     if ((!towerinfos) || !geom)
0390     {
0391       return std::vector<Jet *>();
0392     }
0393   }
0394   else if (m_input == Jet::HCALOUT_TOWER_SUB1)
0395   {
0396     towers = findNode::getClass<RawTowerContainer>(topNode, "TOWER_CALIB_HCALOUT_SUB1");
0397     geom = findNode::getClass<RawTowerGeomContainer>(topNode, "TOWERGEOM_HCALOUT");
0398     if ((!towers) || !geom)
0399     {
0400       return std::vector<Jet *>();
0401     }
0402   }
0403   else if (m_input == Jet::HCALOUT_TOWERINFO_SUB1)
0404   {
0405     m_use_towerinfo = true;
0406     towerName = m_towerNodePrefix + "_HCALOUT_SUB1";
0407     towerinfos = findNode::getClass<TowerInfoContainer>(topNode, towerName);
0408     geocaloid = RawTowerDefs::CalorimeterId::HCALOUT;
0409     geom = findNode::getClass<RawTowerGeomContainer>(topNode, "TOWERGEOM_HCALOUT");
0410     if ((!towerinfos) || !geom)
0411     {
0412       return std::vector<Jet *>();
0413     }
0414   }
0415   else if (m_input == Jet::CEMC_TOWER_SUB1CS)
0416   {
0417     towers = findNode::getClass<RawTowerContainer>(topNode, "TOWER_CALIB_CEMC_RETOWER_SUB1CS");
0418     geom = findNode::getClass<RawTowerGeomContainer>(topNode, "TOWERGEOM_HCALIN");
0419     if ((!towers) || !geom)
0420     {
0421       return std::vector<Jet *>();
0422     }
0423   }
0424   else if (m_input == Jet::HCALIN_TOWER_SUB1CS)
0425   {
0426     towers = findNode::getClass<RawTowerContainer>(topNode, "TOWER_CALIB_HCALIN_SUB1CS");
0427     geom = findNode::getClass<RawTowerGeomContainer>(topNode, "TOWERGEOM_HCALIN");
0428     if ((!towers) || !geom)
0429     {
0430       return std::vector<Jet *>();
0431     }
0432   }
0433   else if (m_input == Jet::HCALOUT_TOWER_SUB1CS)
0434   {
0435     towers = findNode::getClass<RawTowerContainer>(topNode, "TOWER_CALIB_HCALOUT_SUB1CS");
0436     geom = findNode::getClass<RawTowerGeomContainer>(topNode, "TOWERGEOM_HCALOUT");
0437     if ((!towers) || !geom)
0438     {
0439       return std::vector<Jet *>();
0440     }
0441   }
0442   else
0443   {
0444     return std::vector<Jet *>();
0445   }
0446 
0447   // for those cases we need to use the EMCal R and IHCal eta phi to calculate the vertex correction
0448   if (m_input == Jet::CEMC_TOWER_RETOWER || m_input == Jet::CEMC_TOWERINFO_RETOWER || m_input == Jet::CEMC_TOWER_SUB1 || m_input == Jet::CEMC_TOWERINFO_SUB1 || m_input == Jet::CEMC_TOWER_SUB1CS)
0449   {
0450     EMCal_geom = findNode::getClass<RawTowerGeomContainer>(topNode, "TOWERGEOM_CEMC");
0451     if (!EMCal_geom)
0452     {
0453       return std::vector<Jet *>();
0454     }
0455   }
0456 
0457   // first grab the event vertex or bail
0458 
0459   std::vector<Jet *> pseudojets;
0460   if (m_use_towerinfo)
0461   {
0462     if (!towerinfos)
0463     {
0464       return std::vector<Jet *>();
0465     }
0466 
0467     unsigned int nchannels = towerinfos->size();
0468     for (unsigned int channel = 0; channel < nchannels; channel++)
0469     {
0470       TowerInfo *tower = towerinfos->get_tower_at_channel(channel);
0471       assert(tower);
0472 
0473       unsigned int calokey = towerinfos->encode_key(channel);
0474       int ieta = towerinfos->getTowerEtaBin(calokey);
0475       int iphi = towerinfos->getTowerPhiBin(calokey);
0476       const RawTowerDefs::keytype key = RawTowerDefs::encode_towerid(geocaloid, ieta, iphi);
0477       // skip masked towers
0478       if (tower->get_isHot() || tower->get_isNoCalib() || tower->get_isNotInstr() || tower->get_isBadChi2())
0479       {
0480         continue;
0481       }
0482       if (std::isnan(tower->get_energy()))
0483       {
0484         continue;
0485       }
0486       RawTowerGeom *tower_geom = geom->get_tower_geometry(key);
0487       assert(tower_geom);
0488 
0489       double r = tower_geom->get_center_radius();
0490       if (m_input == Jet::CEMC_TOWER_RETOWER || m_input == Jet::CEMC_TOWERINFO_RETOWER || m_input == Jet::CEMC_TOWER_SUB1 || m_input == Jet::CEMC_TOWERINFO_SUB1 || m_input == Jet::CEMC_TOWER_SUB1CS)
0491       {
0492         const RawTowerDefs::keytype EMCal_key = RawTowerDefs::encode_towerid(RawTowerDefs::CalorimeterId::CEMC, 0, 0);
0493         RawTowerGeom *EMCal_tower_geom = EMCal_geom->get_tower_geometry(EMCal_key);
0494         assert(EMCal_tower_geom);
0495         r = EMCal_tower_geom->get_center_radius();
0496       }
0497       double phi = atan2(tower_geom->get_center_y(), tower_geom->get_center_x());
0498       double towereta = tower_geom->get_eta();
0499       double z0 = sinh(towereta) * r;
0500       double z = z0 - vtxz;
0501       double eta = asinh(z / r);  // eta after shift from vertex
0502       double pt = tower->get_energy() / cosh(eta);
0503       double e = tower->get_energy();
0504       double px = pt * cos(phi);
0505       double py = pt * sin(phi);
0506       double pz = pt * sinh(eta);
0507 
0508       Jet *jet = new Jetv2();
0509       jet->set_px(px);
0510       jet->set_py(py);
0511       jet->set_pz(pz);
0512       jet->set_e(e);
0513       jet->insert_comp(m_input, channel);
0514       pseudojets.push_back(jet);
0515     }
0516   }
0517   else
0518   {
0519     RawTowerContainer::ConstRange begin_end = towers->getTowers();
0520     RawTowerContainer::ConstIterator rtiter;
0521     for (rtiter = begin_end.first; rtiter != begin_end.second; ++rtiter)
0522     {
0523       RawTower *tower = rtiter->second;
0524 
0525       RawTowerGeom *tower_geom = geom->get_tower_geometry(tower->get_key());
0526       assert(tower_geom);
0527 
0528       double r = tower_geom->get_center_radius();
0529       if (m_input == Jet::CEMC_TOWER_RETOWER || m_input == Jet::CEMC_TOWERINFO_RETOWER || m_input == Jet::CEMC_TOWER_SUB1 || m_input == Jet::CEMC_TOWERINFO_SUB1 || m_input == Jet::CEMC_TOWER_SUB1CS)
0530       {
0531         const RawTowerDefs::keytype EMCal_key = RawTowerDefs::encode_towerid(RawTowerDefs::CalorimeterId::CEMC, 0, 0);
0532         RawTowerGeom *EMCal_tower_geom = EMCal_geom->get_tower_geometry(EMCal_key);
0533         assert(EMCal_tower_geom);
0534         r = EMCal_tower_geom->get_center_radius();
0535       }
0536       double phi = atan2(tower_geom->get_center_y(), tower_geom->get_center_x());
0537       double towereta = tower_geom->get_eta();
0538       double z0 = sinh(towereta) * r;
0539       double z = z0 - vtxz;
0540       double eta = asinh(z / r);  // eta after shift from vertex
0541       double pt = tower->get_energy() / cosh(eta);
0542       double px = pt * cos(phi);
0543       double py = pt * sin(phi);
0544       double pz = pt * sinh(eta);
0545 
0546       Jet *jet = new Jetv2();
0547       jet->set_px(px);
0548       jet->set_py(py);
0549       jet->set_pz(pz);
0550       jet->set_e(tower->get_energy());
0551       jet->insert_comp(m_input, tower->get_id());
0552       pseudojets.push_back(jet);
0553     }
0554   }
0555   if (Verbosity() > 0)
0556   {
0557     std::cout << "TowerJetInput::process_event -- exited" << std::endl;
0558   }
0559   return pseudojets;
0560 }