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 Double_t psirange = 4;
00142 if(EPOrder[i]==2 ) psirange = 2;
00143 if(EPOrder[i]==3 ) psirange = 1.5;
00144 if(EPOrder[i]==4 ) psirange = 1;
00145 if(EPOrder[i]==5) psirange = 0.8;
00146 if(EPOrder[i]==6) psirange = 0.6;
00147 }
00148
00149 }
00150
00151
00152 HiEvtPlaneFlatProducer::~HiEvtPlaneFlatProducer()
00153 {
00154
00155
00156
00157
00158 }
00159
00160
00161
00162
00163
00164
00165
00166 void
00167 HiEvtPlaneFlatProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup)
00168 {
00169 using namespace edm;
00170 using namespace std;
00171 using namespace reco;
00172
00173
00174
00175
00176
00177 edm::Handle<int> ch;
00178 iEvent.getByLabel(centrality_,ch);
00179 int bin = *(ch.product());
00180
00181
00182
00183
00184
00185 edm::Handle<reco::VertexCollection> vertexCollection3;
00186 iEvent.getByLabel(vtxCollection_,vertexCollection3);
00187 const reco::VertexCollection * vertices3 = vertexCollection3.product();
00188 vs_sell = vertices3->size();
00189 if(vs_sell>0) {
00190 vzr_sell = vertices3->begin()->z();
00191 vzErr_sell = vertices3->begin()->zError();
00192 } else
00193 vzr_sell = -999.9;
00194
00195
00196
00197 edm::ESHandle<RPFlatParams> flatparmsDB_;
00198 iSetup.get<HeavyIonRPRcd>().get(flatparmsDB_);
00199 int flatTableSize = flatparmsDB_->m_table.size();
00200 for(int i = 0; i<flatTableSize; i++) {
00201 const RPFlatParams::EP* thisBin = &(flatparmsDB_->m_table[i]);
00202 for(int j = 0; j<NumEPNames; j++) {
00203 int indx = thisBin->RPNameIndx[j];
00204 if(indx>=0) {
00205 flat[indx]->SetXDB(i, thisBin->x[j]);
00206 flat[indx]->SetYDB(i, thisBin->y[j]);
00207 }
00208 }
00209 }
00210
00211
00212
00213
00214
00215 Handle<reco::EvtPlaneCollection> evtPlanes;
00216 iEvent.getByLabel(inputPlanes_,evtPlanes);
00217
00218 if(!evtPlanes.isValid()){
00219
00220 return ;
00221 }
00222 double psiFull[NumEPNames];
00223 for(int i = 0; i<NumEPNames; i++) {
00224 psiFull[i] = -10;
00225 }
00226
00227 std::auto_ptr<EvtPlaneCollection> evtplaneOutput(new EvtPlaneCollection);
00228 EvtPlane * ep[NumEPNames];
00229 for(int i = 0; i<NumEPNames; i++) {
00230 ep[i]=0;
00231 }
00232 for (EvtPlaneCollection::const_iterator rp = evtPlanes->begin();rp !=evtPlanes->end(); rp++) {
00233 if(rp->angle() > -5) {
00234 string baseName = rp->label();
00235 for(int i = 0; i< NumEPNames; i++) {
00236 if(EPNames[i].compare(baseName)==0) {
00237 double psiFlat = flat[i]->GetFlatPsi(rp->angle(),vzr_sell,bin);
00238 epang[i]=psiFlat;
00239 if(EPNames[i].compare(rp->label())==0) {
00240 psiFull[i] = psiFlat;
00241 if(storeNames_) ep[i]= new EvtPlane(psiFlat, rp->sumSin(), rp->sumCos(),rp->label().data());
00242 else ep[i]= new EvtPlane(psiFlat, rp->sumSin(), rp->sumCos(),"");
00243 }
00244 }
00245 }
00246 }
00247 }
00248
00249 for(int i = 0; i< NumEPNames; i++) {
00250 if(ep[i]!=0) evtplaneOutput->push_back(*ep[i]);
00251 }
00252 iEvent.put(evtplaneOutput);
00253 storeNames_ = 0;
00254 }
00255
00256
00257 void
00258 HiEvtPlaneFlatProducer::beginJob()
00259 {
00260 }
00261
00262
00263 void
00264 HiEvtPlaneFlatProducer::endJob() {
00265 }
00266
00267
00268 DEFINE_FWK_MODULE(HiEvtPlaneFlatProducer);