Go to the documentation of this file.00001
00002
00003
00004
00005
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <memory>
00024
00025
00026 #include "FWCore/Framework/interface/Frameworkfwd.h"
00027 #include "FWCore/Framework/interface/EDProducer.h"
00028
00029 #include "FWCore/Framework/interface/Event.h"
00030 #include "FWCore/Framework/interface/MakerMacros.h"
00031
00032 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00033 #include "Math/Vector3D.h"
00034
00035 #include "DataFormats/Common/interface/Handle.h"
00036 #include "FWCore/Framework/interface/ESHandle.h"
00037 #include "DataFormats/CaloTowers/interface/CaloTowerCollection.h"
00038
00039 #include "DataFormats/HeavyIonEvent/interface/Centrality.h"
00040 #include "DataFormats/HeavyIonEvent/interface/CentralityBins.h"
00041
00042 #include "DataFormats/HeavyIonEvent/interface/EvtPlane.h"
00043 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00044 #include "DataFormats/TrackReco/interface/Track.h"
00045 #include "DataFormats/VertexReco/interface/Vertex.h"
00046 #include "DataFormats/VertexReco/interface/VertexFwd.h"
00047 #include "SimDataFormats/Track/interface/SimTrack.h"
00048 #include "SimDataFormats/Track/interface/SimTrackContainer.h"
00049 #include "SimDataFormats/Track/interface/CoreSimTrack.h"
00050 #include "SimDataFormats/EncodedEventId/interface/EncodedEventId.h"
00051 #include "SimDataFormats/Vertex/interface/SimVertex.h"
00052 #include "SimDataFormats/Vertex/interface/SimVertexContainer.h"
00053 #include "SimDataFormats/TrackingHit/interface/PSimHit.h"
00054 #include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h"
00055 #include "SimDataFormats/TrackingHit/interface/UpdatablePSimHit.h"
00056 #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h"
00057 #include "SimDataFormats/TrackingAnalysis/interface/TrackingVertexContainer.h"
00058
00059 #include "FWCore/ServiceRegistry/interface/Service.h"
00060 #include "CommonTools/UtilAlgos/interface/TFileService.h"
00061 #include "CondFormats/DataRecord/interface/HeavyIonRPRcd.h"
00062 #include "CondFormats/HIObjects/interface/CentralityTable.h"
00063 #include "CondCore/DBOutputService/interface/PoolDBOutputService.h"
00064 #include "CondFormats/HIObjects/interface/RPFlatParams.h"
00065
00066 #include "RecoHI/HiEvtPlaneAlgos/interface/HiEvtPlaneFlatten.h"
00067 #include "TList.h"
00068 #include "TString.h"
00069 #include <time.h>
00070 #include <cstdlib>
00071
00072 #include "RecoHI/HiEvtPlaneAlgos/interface/HiEvtPlaneList.h"
00073
00074 using namespace std;
00075 using namespace hi;
00076
00077 #include <vector>
00078 using std::vector;
00079
00080
00081
00082
00083
00084
00085 class HiEvtPlaneFlatProducer : public edm::EDProducer {
00086 public:
00087 explicit HiEvtPlaneFlatProducer(const edm::ParameterSet&);
00088 ~HiEvtPlaneFlatProducer();
00089
00090 private:
00091 virtual void beginJob() ;
00092 virtual void produce(edm::Event&, const edm::EventSetup&);
00093 virtual void endJob() ;
00094
00095
00096
00097 edm::InputTag vtxCollection_;
00098 edm::InputTag inputPlanes_;
00099 edm::InputTag centrality_;
00100
00101 int vs_sell;
00102 float vzr_sell;
00103 float vzErr_sell;
00104
00105 Double_t epang[NumEPNames];
00106 HiEvtPlaneFlatten * flat[NumEPNames];
00107 RPFlatParams * rpFlat;
00108 int nRP;
00109 bool storeNames_;
00110
00111 };
00112
00113
00114
00115
00116 typedef std::vector<TrackingParticle> TrackingParticleCollection;
00117 typedef TrackingParticleRefVector::iterator tp_iterator;
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127 HiEvtPlaneFlatProducer::HiEvtPlaneFlatProducer(const edm::ParameterSet& iConfig)
00128 {
00129
00130 vtxCollection_ = iConfig.getParameter<edm::InputTag>("vtxCollection_");
00131 inputPlanes_ = iConfig.getParameter<edm::InputTag>("inputPlanes_");
00132 centrality_ = iConfig.getParameter<edm::InputTag>("centrality_");
00133 storeNames_ = 1;
00134
00135 produces<reco::EvtPlaneCollection>();
00136
00137 Int_t FlatOrder = 21;
00138 for(int i = 0; i<NumEPNames; i++) {
00139 flat[i] = new HiEvtPlaneFlatten();
00140 flat[i]->Init(FlatOrder,11,4,EPNames[i],EPOrder[i]);
00141 }
00142
00143 }
00144
00145
00146 HiEvtPlaneFlatProducer::~HiEvtPlaneFlatProducer()
00147 {
00148
00149
00150
00151
00152 }
00153
00154
00155
00156
00157
00158
00159
00160 void
00161 HiEvtPlaneFlatProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup)
00162 {
00163 using namespace edm;
00164 using namespace std;
00165 using namespace reco;
00166
00167
00168
00169
00170
00171 edm::Handle<int> ch;
00172 iEvent.getByLabel(centrality_,ch);
00173 int bin = *(ch.product());
00174
00175
00176
00177
00178
00179 edm::Handle<reco::VertexCollection> vertexCollection3;
00180 iEvent.getByLabel(vtxCollection_,vertexCollection3);
00181 const reco::VertexCollection * vertices3 = vertexCollection3.product();
00182 vs_sell = vertices3->size();
00183 if(vs_sell>0) {
00184 vzr_sell = vertices3->begin()->z();
00185 vzErr_sell = vertices3->begin()->zError();
00186 } else
00187 vzr_sell = -999.9;
00188
00189
00190
00191 edm::ESHandle<RPFlatParams> flatparmsDB_;
00192 iSetup.get<HeavyIonRPRcd>().get(flatparmsDB_);
00193 int flatTableSize = flatparmsDB_->m_table.size();
00194 for(int i = 0; i<flatTableSize; i++) {
00195 const RPFlatParams::EP* thisBin = &(flatparmsDB_->m_table[i]);
00196 for(int j = 0; j<NumEPNames; j++) {
00197 int indx = thisBin->RPNameIndx[j];
00198 if(indx>=0) {
00199 flat[indx]->SetXDB(i, thisBin->x[j]);
00200 flat[indx]->SetYDB(i, thisBin->y[j]);
00201 }
00202 }
00203 }
00204
00205
00206
00207
00208
00209 Handle<reco::EvtPlaneCollection> evtPlanes;
00210 iEvent.getByLabel(inputPlanes_,evtPlanes);
00211
00212 if(!evtPlanes.isValid()){
00213
00214 return ;
00215 }
00216
00217 std::auto_ptr<EvtPlaneCollection> evtplaneOutput(new EvtPlaneCollection);
00218 EvtPlane * ep[NumEPNames];
00219 for(int i = 0; i<NumEPNames; i++) {
00220 ep[i]=0;
00221 }
00222 for (EvtPlaneCollection::const_iterator rp = evtPlanes->begin();rp !=evtPlanes->end(); rp++) {
00223 if(rp->angle() > -5) {
00224 string baseName = rp->label();
00225 for(int i = 0; i< NumEPNames; i++) {
00226 if(EPNames[i].compare(baseName)==0) {
00227 double psiFlat = flat[i]->GetFlatPsi(rp->angle(),vzr_sell,bin);
00228 epang[i]=psiFlat;
00229 if(EPNames[i].compare(rp->label())==0) {
00230 if(storeNames_) ep[i]= new EvtPlane(psiFlat, rp->sumSin(), rp->sumCos(),rp->label().data());
00231 else ep[i]= new EvtPlane(psiFlat, rp->sumSin(), rp->sumCos(),"");
00232 }
00233 }
00234 }
00235 }
00236 }
00237
00238 for(int i = 0; i< NumEPNames; i++) {
00239 if(ep[i]!=0) evtplaneOutput->push_back(*ep[i]);
00240 }
00241 iEvent.put(evtplaneOutput);
00242 storeNames_ = 0;
00243 }
00244
00245
00246 void
00247 HiEvtPlaneFlatProducer::beginJob()
00248 {
00249 }
00250
00251
00252 void
00253 HiEvtPlaneFlatProducer::endJob() {
00254 }
00255
00256
00257 DEFINE_FWK_MODULE(HiEvtPlaneFlatProducer);