Go to the documentation of this file.00001 #ifndef PF_DisplayManager_h
00002 #define PF_DisplayManager_h
00003
00004 #include "RecoParticleFlow/PFRootEvent/interface/DisplayCommon.h"
00005 #include "DataFormats/ParticleFlowReco/interface/PFBrem.h"
00006 #include "DataFormats/ParticleFlowReco/interface/PFRecHit.h"
00007 #include "DataFormats/ParticleFlowReco/interface/PFRecTrack.h"
00008 #include "DataFormats/ParticleFlowReco/interface/PFSimParticle.h"
00009 #include "DataFormats/ParticleFlowReco/interface/PFBrem.h"
00010 #include "DataFormats/ParticleFlowReco/interface/PFCluster.h"
00011 #include "DataFormats/ParticleFlowReco/interface/PFCluster.h"
00012
00013 #include "DataFormats/HepMCCandidate/interface/GenParticle.h"
00014
00015 #include <TCanvas.h>
00016 #include <TObject.h>
00017 #include <TLine.h>
00018 #include <TBox.h>
00019 #include <TEllipse.h>
00020 #include <string>
00021 #include <map>
00022
00023 class IO;
00024
00025 class GPFRecHit;
00026 class GPFCluster;
00027 class GPFTrack;
00028 class GPFSimParticle;
00029 class GPFBase;
00030 class GPFGenParticle;
00031 class PFRootEventManager;
00032 class TH2F;
00033
00034 class DisplayManager {
00035
00036 public:
00037 DisplayManager( PFRootEventManager *em,
00038 const char* optfile );
00039 virtual ~DisplayManager();
00040
00041 void readOptions( const char* file );
00042
00043 void display(int ientry);
00044 void displayEvent( int run, int lumi, int event);
00045 void displayAll(bool noRedraw = true);
00046 void displayNext();
00047 void displayNextInteresting(int ientry);
00048 void displayPrevious();
00049 void displayPFBlock(int blockNb) ;
00050 void enableDrawPFBlock(bool state);
00051 void enableDrawBrem(bool state);
00052 void findAndDraw(int ident);
00053
00054 void findBlock(int ident) ;
00056 void lookForGenParticle(unsigned barcode);
00058 void lookForMaxRecHit(bool ecal);
00059 void reset();
00060 void updateDisplay();
00061 void unZoom();
00062 void printDisplay(const char* directory="" ) const;
00063 void printGenParticleInfo(std::string name, int barcode, int barcodeMother);
00064 void drawWithNewGraphicAttributes();
00065 void setNewAttrToSimParticles();
00066
00067
00068
00069
00070
00071 double clusEnMin_;
00072 double hitEnMin_;
00073 double trackPtMin_;
00074 double gsfPtMin_;
00075 double particlePtMin_;
00076 double genParticlePtMin_;
00077
00078 bool drawHits_;
00079 bool drawTracks_;
00080 bool drawGsfTracks_;
00081 bool drawBrems_;
00082 bool drawClus_;
00083 bool drawClusterL_;
00084 bool drawParticles_;
00085 bool drawGenParticles_;
00086 bool drawPFBlocks_;
00087
00088
00089
00090
00091 std::multimap<int,GPFBase *> graphicMap_;
00092
00093 std::multimap<int , std::pair <int,int> > blockIdentsMap_;
00094
00095
00096 std::vector<float> trackAttributes_;
00097 std::vector<float> gsfAttributes_;
00098 std::vector<float> bremAttributes_;
00099 std::vector<float> clusterAttributes_;
00100
00101
00102 TAttMarker *clusPattern_;
00103 TAttMarker *clusPSPattern_;
00104
00105 TAttMarker *trackPatternM_;
00106 TAttLine *trackPatternL_;
00107 TAttMarker *gsfPatternM_;
00108 TAttLine *gsfPatternL_;
00109 TAttMarker *bremPatternM_;
00110 TAttLine *bremPatternL_;
00111 TAttMarker *genPartPattern_;
00112
00113 TAttLine *simPartPatternL_;
00114 TAttMarker *simPartPatternPhoton_;
00115 TAttMarker *simPartPatternElec_ ;
00116 TAttMarker *simPartPatternMuon_;
00117 TAttMarker *simPartPatternK_;
00118 TAttMarker *simPartPatternPi_;
00119 TAttMarker *simPartPatternProton_;
00120 TAttMarker *simPartPatternNeutron_;
00121 TAttMarker *simPartPatternDefault_;
00122
00123 std::vector<TAttMarker *> simPartPatternM_;
00124
00125
00126 private:
00127
00128 PFRootEventManager *em_;
00129
00131 IO* options_;
00132
00133 double maxERecHitEcal_;
00134 double maxERecHitHcal_;
00135 bool isGraphicLoaded_;
00136 int eventNumber_;
00137 int maxEvents_;
00138 double zoomFactor_;
00139
00143 int shiftId_;
00144
00145
00147 std::vector<TCanvas*> displayView_;
00148
00150 std::vector<int> viewSize_;
00151
00153 std::vector<int> viewSizeEtaPhi_;
00154
00156 std::vector<TH2F*> displayHist_;
00157
00159 TEllipse frontFaceECALXY_;
00160
00162 TBox frontFaceECALRZ_;
00163
00165 TEllipse frontFaceHCALXY_;
00166
00167
00168
00170
00171
00172
00173
00174 std::vector<int> selectedGObj_;
00175 std::vector<int> badBremsId_;
00176
00177
00178
00179 void getDisplayOptions();
00180
00181
00182 void createCanvas();
00183
00184 void displayCanvas();
00185
00186
00187
00188 void createGRecHit(reco::PFRecHit& rh,int ident,
00189 double maxe, double phi0=0. , int color=4);
00190
00191 void createGCluster(const reco::PFCluster& cluster,
00192 int ident, double phi0 = 0.);
00193
00194 void createGTrack(reco::PFRecTrack &tr,
00195 const std::vector<reco::PFTrajectoryPoint>& points,
00196 int ident,double pt,double phi0, double sign,
00197 bool displayInitial, int linestyle, int kfgsfbrem=0);
00198
00199 void createGPart(const reco::PFSimParticle &ptc,
00200 const std::vector<reco::PFTrajectoryPoint>& points,
00201 int ident,double pt,double phi0, double sign,
00202 bool displayInitial,int markerIndex);
00203
00204
00205 void createGGenParticle(HepMC::GenParticle* p);
00206
00207
00208 void drawGObject(int ident,int color,bool toInitialColor);
00209
00210
00211 void loadGraphicObjects();
00212
00213 void loadGRecHits();
00214
00215 void loadGClusters();
00216
00217 void loadGRecTracks();
00218
00219 void loadGGsfRecTracks();
00220
00221 void loadGSimParticles();
00222
00223 void loadGPFBlocks();
00224
00225 void loadGGenParticles();
00226
00227
00228 void rubOutGPFBlock();
00229
00230
00231 void retrieveBadBrems();
00232 bool findBadBremsId(int ident);
00233
00234
00235
00236
00237 double getMaxE(int layer) const;
00238 double getMaxEEcal();
00239 double getMaxEHcal();
00240
00241
00242
00243
00244 };
00245 #endif