Go to the documentation of this file.00001 #ifndef FP420Test_H
00002 #define FP420Test_H
00003
00004
00005 #include<vector>
00006 #include <iostream>
00007 #include <memory>
00008 #include <string>
00009
00010
00011 #include "FWCore/Framework/interface/Frameworkfwd.h"
00012 #include "FWCore/Framework/interface/EDAnalyzer.h"
00013 #include "FWCore/Framework/interface/MakerMacros.h"
00014
00015
00016 #include "FWCore/Framework/interface/ESHandle.h"
00017
00018
00019
00020 #include "SimG4Core/Notification/interface/Observer.h"
00021 #include "SimG4Core/Notification/interface/BeginOfJob.h"
00022 #include "SimG4Core/Notification/interface/BeginOfRun.h"
00023 #include "SimG4Core/Notification/interface/EndOfRun.h"
00024 #include "SimG4Core/Notification/interface/BeginOfEvent.h"
00025 #include "SimG4Core/Notification/interface/EndOfEvent.h"
00026 #include "SimG4Core/Notification/interface/BeginOfTrack.h"
00027 #include "SimG4Core/Notification/interface/EndOfTrack.h"
00028 #include "SimG4Core/Watcher/interface/SimWatcher.h"
00029
00030
00031 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00032
00033 #include "SimG4CMS/FP420/interface/FP420G4Hit.h"
00034
00035 #include "G4VTouchable.hh"
00036 #include <map>
00037 #include <cmath>
00038 #include <CLHEP/Random/Randomize.h>
00039
00040
00041
00042
00043
00044
00045 #include "TROOT.h"
00046 #include "TFile.h"
00047 #include "TH1.h"
00048 #include "TH2.h"
00049 #include "TProfile.h"
00050 #include "TNtuple.h"
00051 #include "TRandom.h"
00052 #include "TLorentzVector.h"
00053 #include "TUnixSystem.h"
00054 #include "TSystem.h"
00055 #include "TMath.h"
00056 #include "TF1.h"
00057
00058
00059 #include <TObjArray.h>
00060 #include <TObjString.h>
00061 #include <TNamed.h>
00062
00063
00064 class Fp420AnalysisHistManager : public TNamed {
00065 public:
00066
00067 Fp420AnalysisHistManager(TString managername);
00068 ~Fp420AnalysisHistManager();
00069
00070 TH1F* GetHisto(Int_t Number);
00071 TH1F* GetHisto(const TObjString histname);
00072
00073 TH2F* GetHisto2(Int_t Number);
00074 TH2F* GetHisto2(const TObjString histname);
00075
00076 void WriteToFile(TString fOutputFile,TString fRecreateFile);
00077
00078 private:
00079
00080 void BookHistos();
00081 void StoreWeights();
00082 void HistInit(const char* name, const char* title, Int_t nbinsx, Axis_t xlow, Axis_t xup);
00083 void HistInit(const char* name, const char* title, Int_t nbinsx, Axis_t xlow, Axis_t xup, Int_t nbinsy, Axis_t ylow, Axis_t yup);
00084
00085 const char* fTypeTitle;
00086 TObjArray* fHistArray;
00087 TObjArray* fHistNamesArray;
00088
00089 };
00090
00091
00092 class FP420NumberingScheme;
00093
00094 class BeginOfJob;
00095 class BeginOfRun;
00096 class EndOfRun;
00097 class BeginOfEvent;
00098 class EndOfEvent;
00099 class BeginOfTrack;
00100 class EndOfTrack;
00101 class G4Step;
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162 class FP420Test : public SimWatcher,
00163 public Observer<const BeginOfJob *>,
00164 public Observer<const BeginOfRun *>,
00165 public Observer<const EndOfRun *>,
00166 public Observer<const BeginOfEvent *>,
00167 public Observer<const BeginOfTrack *>,
00168 public Observer<const G4Step *>,
00169 public Observer<const EndOfTrack *>,
00170 public Observer<const EndOfEvent *>
00171 {
00172 public:
00173 FP420Test(const edm::ParameterSet &p);
00174 virtual ~FP420Test();
00175
00176
00177 private:
00178
00179
00180 void update(const BeginOfJob * run);
00181 void update(const BeginOfRun * run);
00182 void update(const EndOfRun * run);
00183 void update(const BeginOfEvent * evt);
00184 void update(const BeginOfTrack * trk);
00185 void update(const G4Step * step);
00186 void update(const EndOfTrack * trk);
00187 void update(const EndOfEvent * evt);
00188
00189 private:
00190
00191
00192 FP420NumberingScheme * theFP420NumberingScheme;
00193
00194
00195 int iev;
00196 int itrk;
00197 G4double entot0, tracklength0;
00198
00199 private:
00200
00201
00202 int detLevels(const G4VTouchable*) const;
00203 G4String detName(const G4VTouchable*, int, int) const;
00204 void detectorLevel(const G4VTouchable*, int&, int*, G4String*) const;
00205
00206
00207 double rinCalo, zinCalo;
00208 int lastTrackID;
00209 int verbosity;
00210
00211
00212 G4double SumEnerDeposit, SumStepl, SumStepc;
00213
00214 int numofpart;
00215
00216 G4ThreeVector lastpo;
00217
00218
00219
00220 double z1, z2, z3, z4, zD2, zD3;
00221 int sn0, dn0, pn0, rn0;
00222 int rn00;
00223 double ZSiDet, z420;
00224 double ZGapLDet, ZBoundDet, ZSiStep, ZSiPlane, zinibeg;
00225 double zBlade, gapBlade;
00226
00227 private:
00228
00229 Float_t fp420eventarray[1];
00230 TNtuple* fp420eventntuple;
00231 TFile fp420OutputFile;
00232 int whichevent;
00233
00234 Fp420AnalysisHistManager* TheHistManager;
00235 std::string fDataLabel;
00236 std::string fOutputFile;
00237 std::string fRecreateFile;
00238
00239
00240
00241
00242
00243
00244 };
00245
00246 #endif
00247
00248
00249
00250
00251
00252
00253
00254
00255