File indexing completed on 2024-04-06 12:32:18
0001
0002
0003
0004
0005
0006
0007
0008 #ifndef Loopers_h
0009 #define Loopers_h
0010
0011 #include <TROOT.h>
0012 #include <TChain.h>
0013 #include <TFile.h>
0014 #include <TString.h>
0015 #include <TGaxis.h>
0016
0017 #include <TTree.h>
0018 #include <iostream>
0019 #include <fstream>
0020
0021
0022
0023 TH1F* hist_loops;
0024 TH1F* hist_energy_init;
0025 TH1F* hist_energy_end;
0026 TH1F* hist_energy_beforeend;
0027 TH1F* hist_density;
0028 TH1F* hist_lambda0;
0029 TH2F* hist_density_vs_loops;
0030 TH1F* hist_pT_init;
0031 TH1F* hist_pT_end;
0032 TH1F* hist_energyLossPerTurn;
0033 TH1F* hist_trackLength;
0034 TH1F* hist_trackLengthPerTurn;
0035 TH1F* hist_lastInteraction;
0036 TH1F* hist_bx;
0037 TH1F* hist_bx_finer;
0038 TH2F* hist_energy_beforeend_vs_lastInteraction;
0039 TH2F* hist_trackLength_vs_lastInteraction;
0040 TH1F* hist_hadronicInteractions;
0041 TH2F* hist_hadronicInteractions_vs_lastInteraction;
0042 TH1F* hist_energyLossHadronicInteractions;
0043 TH2F* hist_productionEnergy_vs_secondaryParticle;
0044 TH2F* hist_bx_vs_secondaryParticle;
0045
0046
0047
0048 std::ofstream theLogFile;
0049
0050
0051 const double pi = 3.14159265;
0052 const double c = 299792458;
0053 const double bx = 25;
0054 const double Ekin_threshold = 20;
0055
0056 class Loopers {
0057 public :
0058 TTree *fChain;
0059 Int_t fCurrent;
0060
0061
0062 Int_t ParticleID;
0063 Int_t Nsteps;
0064 Double_t InitialX[10000];
0065 Double_t InitialY[10000];
0066 Double_t InitialZ[10000];
0067 Double_t FinalX[10000];
0068 Double_t FinalY[10000];
0069 Double_t FinalZ[10000];
0070 Float_t InitialE[10000];
0071 Float_t FinalE[10000];
0072 Float_t InitialM[10000];
0073 Int_t ParticleStepID[10000];
0074 Int_t ParticleStepPreInteraction[10000];
0075 Int_t ParticleStepPostInteraction[10000];
0076 Float_t MaterialDensity[10000];
0077 Float_t MaterialLambda0[10000];
0078 Float_t ParticleStepInitialPt[10000];
0079 Float_t ParticleStepFinalPt[10000];
0080
0081
0082 TBranch *b_ParticleID;
0083 TBranch *b_Nsteps;
0084 TBranch *b_InitialX;
0085 TBranch *b_InitialY;
0086 TBranch *b_InitialZ;
0087 TBranch *b_FinalX;
0088 TBranch *b_FinalY;
0089 TBranch *b_FinalZ;
0090 TBranch *b_FinalE;
0091 TBranch *b_InitialE;
0092 TBranch *b_InitialM;
0093 TBranch *b_ParticleStepID;
0094 TBranch *b_ParticleStepPreInteraction;
0095 TBranch *b_ParticleStepPostInteraction;
0096 TBranch *b_MaterialDensity;
0097 TBranch *b_MaterialLambda0;
0098 TBranch *b_ParticleStepInitialPt;
0099 TBranch *b_ParticleStepFinalPt;
0100
0101 Loopers(TString fileName);
0102 virtual ~Loopers();
0103 virtual Int_t Cut(Long64_t entry);
0104 virtual Int_t GetEntry(Long64_t entry);
0105 virtual Long64_t LoadTree(Long64_t entry);
0106 virtual void Init(TTree *tree);
0107 virtual void Loop();
0108 virtual Bool_t Notify();
0109 virtual void Show(Long64_t entry = -1);
0110
0111
0112 private:
0113
0114 virtual void helpfulCommands();
0115
0116
0117 TString theDirName;
0118
0119 Bool_t isDecay;
0120 Int_t actualParticleID;
0121 };
0122
0123 #endif
0124
0125 #ifdef Loopers_cxx
0126 Loopers::Loopers(TString fileName)
0127 {
0128
0129 theDirName = "Images";
0130
0131
0132 cout << "*** Open file... " << endl;
0133 cout << fileName << endl;
0134 cout << "***" << endl;
0135 cout << " Output Directory... " << endl;
0136 cout << theDirName << endl;
0137 cout << "***" << endl;
0138
0139 theLogFile.open("Loopers.log");
0140
0141
0142
0143 TFile* theDetectorFile = new TFile(fileName);
0144
0145
0146 TTree* theTree = (TTree*)theDetectorFile->Get("T1");
0147
0148 Init(theTree);
0149 Book();
0150
0151 helpfulCommands();
0152
0153 isDecay = false;
0154 actualParticleID = 0;
0155 }
0156
0157 Loopers::~Loopers()
0158 {
0159 if (!fChain) return;
0160 delete fChain->GetCurrentFile();
0161 }
0162
0163 Int_t Loopers::GetEntry(Long64_t entry)
0164 {
0165
0166 if (!fChain) return 0;
0167 return fChain->GetEntry(entry);
0168 }
0169 Long64_t Loopers::LoadTree(Long64_t entry)
0170 {
0171
0172 if (!fChain) return -5;
0173 Long64_t centry = fChain->LoadTree(entry);
0174 if (centry < 0) return centry;
0175 if (fChain->IsA() != TChain::Class()) return centry;
0176 TChain *chain = (TChain*)fChain;
0177 if (chain->GetTreeNumber() != fCurrent) {
0178 fCurrent = chain->GetTreeNumber();
0179 Notify();
0180 }
0181 return centry;
0182 }
0183
0184 void Loopers::Init(TTree *tree)
0185 {
0186
0187
0188
0189
0190
0191
0192
0193
0194
0195 if (!tree) return;
0196 fChain = tree;
0197 fCurrent = -1;
0198 fChain->SetMakeClass(1);
0199
0200 fChain->SetBranchAddress("Particle ID", &ParticleID, &b_ParticleID);
0201 fChain->SetBranchAddress("Nsteps", &Nsteps, &b_Nsteps);
0202 fChain->SetBranchAddress("Initial X", InitialX, &b_InitialX);
0203 fChain->SetBranchAddress("Initial Y", InitialY, &b_InitialY);
0204 fChain->SetBranchAddress("Initial Z", InitialZ, &b_InitialZ);
0205 fChain->SetBranchAddress("Final X", FinalX, &b_FinalX);
0206 fChain->SetBranchAddress("Final Y", FinalY, &b_FinalY);
0207 fChain->SetBranchAddress("Final Z", FinalZ, &b_FinalZ);
0208 fChain->SetBranchAddress("Particle Step Initial Energy", InitialE, &b_InitialE);
0209 fChain->SetBranchAddress("Particle Step Final Energy", FinalE, &b_FinalE);
0210 fChain->SetBranchAddress("Particle Step Initial Mass", InitialM, &b_InitialM);
0211 fChain->SetBranchAddress("Particle Step ID", ParticleStepID, &b_ParticleStepID);
0212 fChain->SetBranchAddress("Particle Step Pre Interaction", ParticleStepPreInteraction, &b_ParticleStepPreInteraction);
0213 fChain->SetBranchAddress("Particle Step Post Interaction", ParticleStepPostInteraction, &b_ParticleStepPostInteraction);
0214 fChain->SetBranchAddress("Material Density", MaterialDensity, &b_MaterialDensity);
0215 fChain->SetBranchAddress("Material Lambda0", MaterialLambda0, &b_MaterialLambda0);
0216 fChain->SetBranchAddress("Particle Step Initial Pt", ParticleStepInitialPt, &b_ParticleStepInitialPt);
0217 fChain->SetBranchAddress("Particle Step Final Pt", ParticleStepFinalPt, &b_ParticleStepFinalPt);
0218 Notify();
0219 }
0220
0221 Bool_t Loopers::Notify()
0222 {
0223
0224
0225
0226
0227
0228
0229 return kTRUE;
0230 }
0231
0232 void Loopers::Show(Long64_t entry)
0233 {
0234
0235
0236 if (!fChain) return;
0237 fChain->Show(entry);
0238 }
0239 Int_t Loopers::Cut(Long64_t entry)
0240 {
0241
0242
0243
0244 return 1;
0245 }
0246
0247 void Loopers::Book(){
0248 hist_loops = new TH1F("hist_loops",
0249 "Number of Turns before stopping;Turns [2#pi];Events/bin",
0250 80,0,20);
0251 hist_energy_init = new TH1F("hist_energy_init",
0252 "Energy at starting point;Energy [MeV];Events/bin",
0253 100,0.0,1000.0);
0254 hist_energy_end = new TH1F("hist_energy_end",
0255 "Energy at stopping point;Energy [MeV];Events/bin",
0256 100,0.0,1000.0);
0257 hist_energy_beforeend = new TH1F("hist_energy_beforeend",
0258 "Energy before stopping point;Energy [MeV];Events/bin",
0259 100,0.0,1000.0);
0260 hist_density = new TH1F("hist_density",
0261 "Average Density;#bar{#rho} [g/cm^{3}];Events/bin",
0262 30,0.0,0.3);
0263 hist_lambda0 = new TH1F("hist_lambda0",
0264 "Average Nuclear Interaction Length;#bar{#\lambda_{0}} [mm];Events/bin",
0265 200,0.0,20000.0);
0266 hist_density_vs_loops = new TH2F("hist_density_vs_loops",
0267 "Average Density vs Number of Turns;Turns [2#pi];#bar{#rho} [g/cm^{3}];Events/bin",
0268 80,0,20,30,0.0,0.3);
0269
0270 hist_pT_init = new TH1F("hist_pT_init",
0271 "Transverse Momentum at starting point;p_{T} [MeV/c];Events/bin",
0272 100,0.0,1000.0);
0273 hist_pT_end = new TH1F("hist_pT_end",
0274 "Transverse Momentum at stopping point;p_{T} [MeV/c];Events/bin",
0275 100,0.0,1000.0);
0276 hist_energyLossPerTurn = new TH1F("hist_energyLossPerTurn",
0277 "Energy Loss per Turn;Energy [MeV];Events/bin",
0278 50,0.0,500.0);
0279 hist_trackLength = new TH1F("hist_trackLength",
0280 "Track Length;Length [mm];Events/bin",
0281 100,0.0,100000.0);
0282 hist_trackLengthPerTurn = new TH1F("hist_trackLengthPerTurn",
0283 "Track Length per Turn;Track Length [mm];Events/bin",
0284 50,0.0,50000.0);
0285 hist_lastInteraction = new TH1F("hist_lastInteraction",
0286 "Last Geant4 Process;Process Type;Events/bin",
0287 11,-0.5,10.5);
0288 hist_bx = new TH1F("hist_bx",
0289 "Bunch Crossings [25 ns];Bunch Crossing [25 ns];Events/bin",
0290 21,-0.25,10.25);
0291
0292 hist_bx_finer = new TH1F("hist_bx_finer",
0293 "Bunch Crossings [25 ns];Bunch Crossing [25 ns];Events/bin",
0294 100,0,10);
0295
0296 hist_energybeforeend_vs_lastInteraction = new TH2F("hist_energybeforeend_vs_lastInteraction",
0297 "Energy before stopping point vs Last Geant4 Process;Process Type;Energy [MeV];Events/bin",
0298 11,-0.5,10.5,100,0.0,1000.0);
0299 hist_trackLength_vs_lastInteraction = new TH2F("hist_trackLength_vs_lastInteraction",
0300 "Track Length vs Last Geant4 Process;Process Type;Length [mm];Events/bin",
0301 11,-0.5,10.5,30,0.0,30000.0);
0302 hist_hadronicInteractions = new TH1F("hist_hadronicInteractions",
0303 "Number of Hadronic Interactions;Hadronic Interactions;Events/bin",
0304 7,-0.5,6.5);
0305 hist_hadronicInteractions_vs_lastInteraction = new TH2F("hist_hadronicInteractions_vs_lastInteraction",
0306 "Number of Hadronic Interactions vs Last Geant4 Process;Process Type;Hadronic Interactions;Events/bin",
0307 11,-0.5,10.5,7,-0.5,6.5);
0308 hist_energyLossHadronicInteractions = new TH1F("hist_energyLossHadronicInteractions",
0309 "Energy Loss in Hadronic Interactions;Energy [MeV];Events/bin",
0310 100,0.0,1000.0);
0311
0312 hist_productionEnergy_vs_secondaryParticle = new TH2F("hist_productionEnergy_vs_secondaryParticle",
0313 "Kinetic Energy at Production vs Secondary Particle;Secondary Particle;Energy [MeV];Events/bin",
0314 4,0.5,4.5,100,0.0,1000.0);
0315
0316 hist_bx_vs_secondaryParticle = new TH2F("hist_bx_vs_secondaryParticle",
0317 "Bunch Crossings [25 ns] vs Secondary Particle;Secondary Particle;Bunch Crossing [25 ns];Events/bin",
0318 4,0.5,4.5,21,-0.25,10.25);
0319
0320 }
0321
0322 void Loopers::MakePlots(TString suffix);
0323
0324 void Loopers::rootStyle();
0325
0326 #endif