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 #include "SimDataFormats/HepMCProduct/interface/HepMCProduct.h"
00018
00019
00020
00021 #include "SimG4Core/Notification/interface/Observer.h"
00022 #include "SimG4Core/Notification/interface/BeginOfJob.h"
00023 #include "SimG4Core/Notification/interface/BeginOfRun.h"
00024 #include "SimG4Core/Notification/interface/EndOfRun.h"
00025 #include "SimG4Core/Notification/interface/BeginOfEvent.h"
00026 #include "SimG4Core/Notification/interface/EndOfEvent.h"
00027 #include "SimG4Core/Notification/interface/BeginOfTrack.h"
00028 #include "SimG4Core/Notification/interface/EndOfTrack.h"
00029 #include "SimG4Core/Watcher/interface/SimWatcher.h"
00030
00031
00032 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00033
00034 #include "SimG4CMS/FP420/interface/FP420G4Hit.h"
00035
00036 #include "G4VTouchable.hh"
00037 #include <map>
00038 #include <cmath>
00039 #include <CLHEP/Random/Randomize.h>
00040
00041
00042
00043
00044
00045
00046 #include "TROOT.h"
00047 #include "TFile.h"
00048 #include "TH1.h"
00049 #include "TH2.h"
00050 #include "TProfile.h"
00051 #include "TNtuple.h"
00052 #include "TRandom.h"
00053 #include "TLorentzVector.h"
00054 #include "TUnixSystem.h"
00055 #include "TSystem.h"
00056 #include "TMath.h"
00057 #include "TF1.h"
00058
00059
00060 #include <TObjArray.h>
00061 #include <TObjString.h>
00062 #include <TNamed.h>
00063
00064
00065 class Fp420AnalysisHistManager : public TNamed {
00066 public:
00067
00068 Fp420AnalysisHistManager(TString managername);
00069 ~Fp420AnalysisHistManager();
00070
00071 TH1F* GetHisto(Int_t Number);
00072 TH1F* GetHisto(const TObjString histname);
00073
00074 TH2F* GetHisto2(Int_t Number);
00075 TH2F* GetHisto2(const TObjString histname);
00076
00077 void WriteToFile(TString fOutputFile,TString fRecreateFile);
00078
00079 private:
00080
00081 void BookHistos();
00082 void StoreWeights();
00083 void HistInit(const char* name, const char* title, Int_t nbinsx, Axis_t xlow, Axis_t xup);
00084 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);
00085
00086 const char* fTypeTitle;
00087 TObjArray* fHistArray;
00088 TObjArray* fHistNamesArray;
00089
00090 };
00091
00092
00093 class FP420NumberingScheme;
00094
00095 class BeginOfJob;
00096 class BeginOfRun;
00097 class EndOfRun;
00098 class BeginOfEvent;
00099 class EndOfEvent;
00100 class BeginOfTrack;
00101 class EndOfTrack;
00102 class G4Step;
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
00163 class FP420Test : public SimWatcher,
00164 public Observer<const BeginOfJob *>,
00165 public Observer<const BeginOfRun *>,
00166 public Observer<const EndOfRun *>,
00167 public Observer<const BeginOfEvent *>,
00168 public Observer<const BeginOfTrack *>,
00169 public Observer<const G4Step *>,
00170 public Observer<const EndOfTrack *>,
00171 public Observer<const EndOfEvent *>
00172 {
00173 public:
00174 FP420Test(const edm::ParameterSet &p);
00175 virtual ~FP420Test();
00176
00177
00178 private:
00179
00180
00181 void update(const BeginOfJob * run);
00182 void update(const BeginOfRun * run);
00183 void update(const EndOfRun * run);
00184 void update(const BeginOfEvent * evt);
00185 void update(const BeginOfTrack * trk);
00186 void update(const G4Step * step);
00187 void update(const EndOfTrack * trk);
00188 void update(const EndOfEvent * evt);
00189
00190 private:
00191
00192
00193 FP420NumberingScheme * theFP420NumberingScheme;
00194
00195
00196 int iev;
00197 int itrk;
00198 G4double entot0, tracklength0;
00199
00200 private:
00201
00202
00203 int detLevels(const G4VTouchable*) const;
00204 G4String detName(const G4VTouchable*, int, int) const;
00205 void detectorLevel(const G4VTouchable*, int&, int*, G4String*) const;
00206
00207
00208 double rinCalo, zinCalo;
00209 int lastTrackID;
00210 int verbosity;
00211
00212
00213 G4double SumEnerDeposit, SumStepl, SumStepc;
00214
00215 int numofpart;
00216
00217 G4ThreeVector lastpo;
00218
00219
00220
00221 double z1, z2, z3, z4;
00222
00223 private:
00224
00225 Float_t fp420eventarray[1];
00226 TNtuple* fp420eventntuple;
00227 TFile fp420OutputFile;
00228 int whichevent;
00229
00230 Fp420AnalysisHistManager* TheHistManager;
00231 std::string fDataLabel;
00232 std::string fOutputFile;
00233 std::string fRecreateFile;
00234
00235
00236
00237
00238
00239
00240 };
00241
00242 #endif
00243
00244
00245
00246
00247
00248
00249
00250
00251