00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #include "AtlfastAlgs/AtlfastProtoJetMaker.h"
00013 #include "AtlfastAlgs/ISmearer.h"
00014 #include "AtlfastAlgs/JetSmearer.h"
00015 #include "AtlfastAlgs/GlobalEventData.h"
00016
00017 #include "AtlfastUtils/HeaderPrinter.h"
00018 #include "AtlfastUtils/HepMC_helper/IsFinalState.h"
00019
00020 #include "AtlfastEvent/AtlfastProtoJet.h"
00021 #include "AtlfastEvent/ICell.h"
00022 #include "AtlfastEvent/Jet.h"
00023 #include "AtlfastEvent/Cluster.h"
00024 #include "AtlfastEvent/CollectionDefs.h"
00025
00026 #include <cmath>
00027 #include <iomanip.h>
00028
00029 #include "GeneratorObjects/McEventCollection.h"
00030
00031 #include "GaudiKernel/DataSvc.h"
00032 #include "GaudiKernel/Chrono.h"
00033 #include "GaudiKernel/MsgStream.h"
00034 #include "GaudiKernel/ISvcLocator.h"
00035
00036 #include "GeneratorObjects/McEventCollection.h"
00037
00038 namespace Atlfast {
00039
00040 AtlfastProtoJetMaker:: AtlfastProtoJetMaker(const std::string& name, ISvcLocator* pSvcLocator):
00041 Algorithm(name,pSvcLocator){
00042
00043
00044 m_inputCellLocation = "/Event/AtlfastCells";
00045 m_inputClusterLocation = "/Event/AtlfastClusters";
00046
00047 m_outputTowerPJKey = "/Event/AtlfastTowerProtoJets";
00048 m_outputClusterPJKey = "/Event/AtlfastClusterProtoJets";
00049 m_outputFinalStatePJKey = "/Event/AtlfastFinalStateProtoJets";
00050
00051
00052 m_towerPJConstruct = true;
00053 m_clusterPJConstruct = true;
00054 m_finalStatePJConstruct = true;
00055
00056 m_towerPJSmearOn = false;
00057 m_clusterPJSmearOn = false;
00058
00059 declareProperty("InputCellLocation", m_inputCellLocation);
00060 declareProperty("InputClusterLocation", m_inputClusterLocation);
00061
00062 declareProperty("OutputTowerPJKey", m_outputTowerPJKey);
00063 declareProperty("OutputClusterPJKey", m_outputClusterPJKey);
00064 declareProperty("OutputFinalStatePJKey", m_outputFinalStatePJKey);
00065
00066 declareProperty("TowerPJConstruct", m_towerPJConstruct);
00067 declareProperty("ClusterPJConstruct", m_clusterPJConstruct);
00068 declareProperty("FinalStatePJConstruct", m_finalStatePJConstruct);
00069
00070 declareProperty("TowerPJSmearOn", m_towerPJSmearOn);
00071 declareProperty("ClusterPJSmearOn", m_clusterPJSmearOn);
00072 }
00073
00074
00075 AtlfastProtoJetMaker::~AtlfastProtoJetMaker()
00076 {
00077 MsgStream log( messageService(), name() ) ;
00078 log << MSG::INFO << "AtlfastProtoJetMaker destructor called" << endreq;
00079 }
00080
00081 StatusCode AtlfastProtoJetMaker::initialize()
00082 {
00083
00084 MsgStream log( messageService(), name() );
00085 log << MSG::DEBUG <<"AtlfastProtoJetllMaker initialize()" << endreq;
00086 m_tesIO = new TesIO();
00087
00088 GlobalEventData* ged = GlobalEventData::Instance();
00089
00090 int lumi = ged->lumi();
00091 int randSeed = ged->randSeed() ;
00092 double barrelForwardEta = ged->barrelForwardEta();
00093
00094 m_smearer = new JetSmearer(randSeed,
00095 lumi,
00096 0.,
00097 0.,
00098 barrelForwardEta);
00099
00100 HeaderPrinter hp("Atlfast-ProtoJet Maker:", log);
00101 hp.add("Input Cell Key ", m_inputCellLocation);
00102 hp.add("Input Cluster Key ", m_inputClusterLocation);
00103 hp.add("Output Tower PJ Key ", m_outputTowerPJKey);
00104 hp.add("Output Cluster PJ Key ", m_outputClusterPJKey);
00105 hp.add("Output FinalState PJ Key ", m_outputFinalStatePJKey);
00106 hp.add("Construct Tower ProtoJets ", m_towerPJConstruct);
00107 hp.add("Construct Cluster ProtoJets ", m_clusterPJConstruct);
00108 hp.add("Construct Final State ProtoJets ", m_finalStatePJConstruct);
00109 hp.add("Smear Tower ProtoJets ", m_towerPJSmearOn);
00110 hp.add("Smear Cluster ProtoJets ", m_clusterPJSmearOn);
00111 hp.print();
00112
00113
00114 return StatusCode::SUCCESS;
00115 }
00116
00117 StatusCode AtlfastProtoJetMaker::finalize()
00118 {
00119 MsgStream log( messageService(), name() );
00120 log << MSG::DEBUG <<"AtlfastProtoJetllMaker finalize()" << endreq;
00121 return StatusCode::SUCCESS;
00122 }
00123
00124
00125 StatusCode AtlfastProtoJetMaker::execute()
00126 {
00127
00128
00129 MsgStream log( messageService(), name() );
00130 std::string message;
00131 log << MSG::DEBUG << "AtlfastProtoJetMaker execute()" << endreq;
00132
00133 AtlfastProtoJet* proJ;
00134
00135 if(m_towerPJConstruct){
00136
00137 std::vector<const ICell*> cells;
00138 TesIoStat stat =
00139 m_tesIO->copy<ICellCollection>(cells,m_inputCellLocation);
00140 message = stat? "Found Cells in TES":"No Cells in TES";
00141 log<<MSG::DEBUG << message <<endreq;
00142 if(stat){
00143 if(!this->FillProtoJets(cells,proJ,m_outputTowerPJKey,m_towerPJSmearOn)){
00144 return StatusCode::FAILURE;
00145 }
00146 }
00147 }
00148
00149 if(m_clusterPJConstruct){
00150
00151 std::vector<Cluster*> clusters;
00152 TesIoStat stat =
00153 m_tesIO->copy<ClusterCollection>(clusters,m_inputClusterLocation);
00154 message = stat? "Found Clusters in TES":"No Clusters in TES";
00155 log<<MSG::DEBUG << message <<endreq;
00156 if(stat){
00157 if(!this->FillProtoJets(clusters,proJ,m_outputClusterPJKey,m_clusterPJSmearOn)){
00158 return StatusCode::FAILURE;
00159 }
00160 }
00161 }
00162 if(m_finalStatePJConstruct){
00163
00164 HepMC_helper::IsFinalState ifs;
00165 MCparticleCollection particles;
00166 TesIoStat stat = m_tesIO->getMC(particles, &ifs);
00167 message = stat? "Found FS Particles in TES":"No FS Particles in TES";
00168 log<<MSG::DEBUG << message <<endreq;
00169 if(stat){
00170 if(!this->FillProtoJets(particles,proJ,m_outputFinalStatePJKey)){
00171 return StatusCode::FAILURE;
00172 }
00173 }
00174 }
00190 return StatusCode::SUCCESS;
00191 }
00192
00193
00194 }
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204