Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-10-13 08:25:11

0001 //-------------------------------------------------------------------------------//
0002 // This macrofile was developed by Konstantinos Chatzipapas at LP2iB (ex. CENBG) //
0003 // in collaboration with the whole team of molecularDNA Geant4-DNA example       //
0004 // For any question please contact through:                                      //
0005 // k.chatzipapas@yahoo.com                                                       //
0006 //-------------------------------------------------------------------------------//
0007 //
0008 // This macro requires the molecular-dna.root file generated from molecularDNA example
0009 // To run this file just insert this command to the terminal:
0010 // root .X phage.C
0011 // ROOT6.x should be installed
0012 //
0013 //************************************//
0014 // Please define the parameters below //
0015 //************************************//
0016 
0017 {
0018 //*******************************************************************************//
0019 // If you need to add multiple root outputs, by multithreading, use this command:
0020 system ("hadd -O -f molecular-dna.root molecular-dna_t*.root");
0021 
0022 // Define these parameters of the simulation
0023 char ifile[256] = "molecular-dna.root";  // input filepath
0024 Double_t r3 = 7000e-9 * 3500e-9 * 3500e-9; // a * b * c   // Chromosome size, as defined in the mac file, but in meters. If sphere, a=b=c
0025 Double_t Nbp = 0.141158; // Mbp // Length of the DNA chain in Mbp
0026 Double_t mass = 997 * 3.141592 * r3;  // waterDensity * pi * r3 in kg // cylinder
0027 //*******************************************************************************//
0028 
0029 typedef std::pair <int64_t, int64_t> ipair;
0030 bool greaterPair(const ipair &l, const ipair &r);
0031 bool smallerPair(const ipair &l, const ipair &r);
0032 
0033 void BinLogX(TH1 *h);
0034 
0035 gROOT->Reset();
0036 gStyle->SetPalette(1);
0037 gROOT->SetStyle("Plain");
0038 gStyle->SetOptStat(00000);
0039 
0040 // Initialize output histograms
0041 TCanvas *cfragment = new TCanvas("cfragment","DNA Fragments Distribution", 900, 120, 600,400);
0042 cfragment->SetLogx();
0043 cfragment->SetLogy();
0044 TH1F *h1fragments = new TH1F("h1fragments","h1fragments",40,0,5);
0045 BinLogX(h1fragments);
0046 
0047 TCanvas *c1 = new TCanvas("c1", "Molecular DNA - Damage Quantification", 60, 120, 800, 800);
0048 c1->SetBorderSize(0);
0049 c1->SetFillColor(0);
0050 c1->SetFillStyle(4000);
0051 gPad->SetLeftMargin(0.13);
0052 
0053 TPad* pad1 = new TPad("pad1","Species", 0, 0.51, 0.49, 1);
0054 pad1->SetBorderSize(0);
0055 pad1->SetFillColor(0);
0056 pad1->SetFillStyle(4000);
0057 pad1->SetLeftMargin(0.15);
0058 pad1->SetRightMargin(0.01);
0059 pad1->SetBottomMargin(0.2);
0060 
0061 TPad* pad2 = new TPad("pad2","Damage Yield", 0.51, 0.5, 1, 1);
0062 pad2->SetBorderSize(0);
0063 pad2->SetFillColor(0);
0064 pad2->SetFillStyle(4000);
0065 pad2->SetLeftMargin(0.15);
0066 pad2->SetRightMargin(0.05);
0067 pad2->SetBottomMargin(0.2);
0068 
0069 TPad* pad3 = new TPad("pad3","Breaks Yield SSB", 0, 0, 0.49, 0.49);
0070 pad3->SetBorderSize(0);
0071 pad3->SetFillColor(0);
0072 pad3->SetFillStyle(4000);
0073 pad3->SetLeftMargin(0.15);
0074 pad3->SetRightMargin(0.01);
0075 //pad3->SetTopMargin(0.2);
0076 pad3->SetBottomMargin(0.2);
0077 
0078 TPad* pad4 = new TPad("pad4","Breaks Yield DSB", 0.51, 0, 1, 0.49);
0079 pad4->SetBorderSize(0);
0080 pad4->SetFillColor(0);
0081 pad4->SetFillStyle(4000);
0082 pad4->SetLeftMargin(0.15);
0083 pad4->SetRightMargin(0.05);
0084 //pad3->SetTopMargin(0.2);
0085 pad4->SetBottomMargin(0.2);
0086 
0087 pad1->Draw();
0088 pad2->Draw();
0089 pad3->Draw();
0090 pad4->Draw();
0091 
0092 // Open root file
0093 TFile *f = TFile::Open(ifile);
0094 
0095 // Initialize Variables
0096 Int_t EB, ES, OHB, OHS, HB, HS, FL;
0097 Int_t total_EB, total_ES, total_OHB, total_OHS, total_HB, total_HS, total_FL;
0098 Float_t total_EB2, total_ES2, total_OHB2, total_OHS2, total_HB2, total_HS2, total_FL2;
0099 Float_t SD_EB, SD_ES, SD_OHB, SD_OHS, SD_HB, SD_HS;
0100 Float_t SD_SSB, SD_SSBp, SD_SSB2p, SD_sSSB, SD_SSBd, SD_SSBi, SD_SSBm;
0101 Float_t SD_DSB, SD_DSBp, SD_DSBpp, SD_sDSB, SD_DSBd, SD_DSBi, SD_DSBm, SD_DSBh;
0102 
0103 Int_t SSB, SSBp, SSB2p;
0104 Int_t total_SSB, total_SSBp, total_SSB2p;
0105 Float_t total_SSB2, total_SSBp2, total_SSB2p2;
0106 Int_t DSB, DSBp, DSBpp;
0107 Int_t total_DSB, total_DSBp, total_DSBpp;
0108 Float_t total_DSB2, total_DSBp2, total_DSBpp2;
0109 
0110 Int_t SSBd, SSBi, SSBm;
0111 Int_t total_sSSB, total_SSBd, total_SSBi, total_SSBm;
0112 Float_t total_sSSB2, total_SSBd2, total_SSBi2, total_SSBm2;
0113 Int_t DSBd, DSBi, DSBm, DSBh;
0114 Int_t total_sDSB, total_DSBd, total_DSBi, total_DSBm, total_DSBh;
0115 Float_t total_sDSB2, total_DSBd2, total_DSBi2, total_DSBm2, total_DSBh2;
0116 
0117 Double_t dose = 0;
0118 Double_t SD_dose = 0;
0119 
0120 Double_t EB_yield = 0; Double_t ES_yield = 0; Double_t OHB_yield = 0; Double_t OHS_yield = 0; Double_t HB_yield = 0; Double_t HS_yield = 0;
0121 Double_t SD_EB_yield = 0; Double_t SD_ES_yield = 0; Double_t SD_OHB_yield = 0; Double_t SD_OHS_yield = 0; Double_t SD_HB_yield = 0; Double_t SD_HS_yield = 0;
0122 
0123 Double_t SSB_yield = 0; Double_t SSBp_yield = 0; Double_t SSB2p_yield = 0;
0124 Double_t SD_SSB_yield = 0; Double_t SD_SSBp_yield = 0; Double_t SD_SSB2p_yield = 0;
0125 Double_t DSB_yield = 0; Double_t DSBp_yield = 0; Double_t DSBpp_yield = 0;
0126 Double_t SD_DSB_yield = 0; Double_t SD_DSBp_yield = 0; Double_t SD_DSBpp_yield = 0;
0127 
0128 Double_t sSSB_yield = 0; Double_t SSBi_yield = 0; Double_t SSBd_yield = 0; Double_t SSBm_yield = 0;
0129 Double_t SD_sSSB_yield = 0; Double_t SD_SSBi_yield = 0; Double_t SD_SSBd_yield = 0; Double_t SD_SSBm_yield = 0;
0130 Double_t sDSB_yield = 0; Double_t DSBi_yield = 0; Double_t DSBd_yield = 0; Double_t DSBm_yield = 0; Double_t DSBh_yield = 0;
0131 Double_t SD_sDSB_yield = 0; Double_t SD_DSBi_yield = 0; Double_t SD_DSBd_yield = 0; Double_t SD_DSBm_yield = 0; Double_t SD_DSBh_yield = 0;
0132 
0133 total_EB  = 0; total_ES = 0; total_OHB = 0; total_OHS = 0; total_HB = 0; total_HS = 0;
0134 
0135 total_SSB  = 0; total_SSBp = 0; total_SSB2p = 0;
0136 total_SSB2  = 0; total_SSBp2 = 0; total_SSB2p2 = 0;
0137 total_DSB  = 0; total_DSBp = 0; total_DSBpp = 0;
0138 total_DSB2  = 0; total_DSBp2 = 0; total_DSBpp2 = 0;
0139 
0140 total_sSSB = 0; total_SSBd = 0; total_SSBi = 0; total_SSBm = 0;
0141 total_sSSB2 = 0; total_SSBd2 = 0; total_SSBi2 = 0; total_SSBm2 = 0;
0142 total_sDSB = 0; total_DSBd = 0; total_DSBi = 0; total_DSBm = 0; total_DSBh = 0;
0143 total_sDSB2 = 0; total_DSBd2 = 0; total_DSBi2 = 0; total_DSBm2 = 0;  total_DSBh2 = 0;
0144 
0145 Double_t eVtoJ = 1.60218e-19;
0146 Double_t EnergyDeposited_eV = 0;
0147 Double_t acc_edep = 0;
0148 Double_t acc_edep2 = 0;
0149 
0150 Double_t Energy;
0151 Double_t BPID;
0152 Char_t Primary;
0153 char *primaryName = new char[32];
0154 char *type= new char[256];
0155 
0156 // Read trees and leaves from root file, and give values to variables
0157 TTree* tree = (TTree*) f->Get("tuples/primary_source");
0158 Float_t number = (Float_t) tree->GetEntries();
0159 
0160 if (number<2) {
0161     std::cout << "Not enough entries in the \"primary_source\" TTree (" << (long)number << " entries)\n";
0162     gApplication->Terminate(0);
0163   }
0164 
0165 vector<pair<int,int64_t>> DSBBPID;
0166 
0167 // For reading species production
0168 tree = (TTree*) f->Get("tuples/damage");
0169 tree->SetBranchAddress("Primary",           &Primary);
0170 tree->SetBranchAddress("Energy",            &Energy);
0171 tree->SetBranchAddress("EaqBaseHits",       &EB);
0172 tree->SetBranchAddress("EaqStrandHits",     &ES);
0173 tree->SetBranchAddress("OHBaseHits",        &OHB);
0174 tree->SetBranchAddress("OHStrandHits",      &OHS);
0175 tree->SetBranchAddress("HBaseHits",         &HB);
0176 tree->SetBranchAddress("HStrandHits",       &HS);
0177 tree->SetBranchAddress("TypeClassification", type);
0178 tree->SetBranchAddress("BasePair",          &BPID);
0179 
0180 
0181 Long64_t nentries = tree->GetEntries();
0182 for(int i = 0;i<nentries;i++){
0183   tree->GetEntry(i);
0184 
0185   total_EB   += EB;
0186   total_EB2  += pow(EB,2);
0187   total_ES   += ES;
0188   total_ES2  += pow(ES,2);
0189   total_OHB  += OHB;
0190   total_OHB2 += pow(OHB,2);
0191   total_OHS  += OHS;
0192   total_OHS2 += pow(OHS,2);
0193   total_HB   += HB;
0194   total_HB2  += pow(HB,2);
0195   total_HS   += HS;
0196   total_HS2  += pow(HS,2);
0197 
0198   if((string)type=="DSB"||(string)type=="DSB+"||(string)type=="DSB++"){
0199     //cout << "DSB:"<<type<<endl;
0200     DSBBPID.push_back(make_pair(i,(int64_t)BPID));
0201     }
0202 
0203   }
0204 
0205 // Sort DSBs from the one with lower ID value to the one with higher ID value
0206 // Then find the number of fragments that have been produced
0207 sort(DSBBPID.begin(),  DSBBPID.end(), smallerPair);
0208 for(int ie = 0;ie<DSBBPID.size()-1;ie++){
0209   int64_t dsbfragment = DSBBPID[ie+1].second-DSBBPID[ie].second;
0210 
0211   double val       = (double)dsbfragment/1000.;
0212   double meanw     = h1fragments->GetBinCenter(h1fragments->FindBin(val));
0213   double binw      = h1fragments->GetBinWidth (h1fragments->FindBin(val));
0214   h1fragments->Fill(val,1./binw/1000);//bp-1
0215   //cout <<"val:"<<val<<endl;
0216   }
0217 
0218 // Calculate the standard deviation of species
0219 SD_EB  = sqrt(abs(((total_EB2  / number) - pow(total_EB  / number,2)))/(number -1));
0220 SD_ES  = sqrt(abs(((total_ES2  / number) - pow(total_ES  / number,2)))/(number -1));
0221 SD_OHB = sqrt(abs(((total_OHB2 / number) - pow(total_OHB / number,2)))/(number -1));
0222 SD_OHS = sqrt(abs(((total_OHS2 / number) - pow(total_OHS / number,2)))/(number -1));
0223 SD_HB  = sqrt(abs(((total_HB2  / number) - pow(total_HB  / number,2)))/(number -1));
0224 SD_HS  = sqrt(abs(((total_HS2  / number) - pow(total_HS  / number,2)))/(number -1));
0225 
0226 // Read damage classification SSB, SSB+, 2SSB, DSB, DSB+, DSB++
0227 // As they have been defined in: Nikjoo, H., O’Neill, O., Goodhead, T., & Terrissol, M. 1997,
0228 // Computational modelling of low-energy electron-induced DNA damage by early physical
0229 // and chemical events, International Journal of Radiation Biology, 71, 467.
0230 tree = (TTree *) f->Get("tuples/classification");
0231 tree->SetBranchAddress("Primary",&Primary);
0232 tree->SetBranchAddress("Energy", &Energy);
0233 tree->SetBranchAddress("SSB",    &SSB);
0234 tree->SetBranchAddress("SSBp",   &SSBp);
0235 tree->SetBranchAddress("2SSB",   &SSB2p);
0236 tree->SetBranchAddress("DSB",    &DSB);
0237 tree->SetBranchAddress("DSBp",   &DSBp);
0238 tree->SetBranchAddress("DSBpp",  &DSBpp);
0239 
0240 
0241 Long64_t nentriesC = tree->GetEntries();
0242 for(int i = 0;i<nentriesC;i++){
0243   tree->GetEntry(i);
0244 
0245   total_SSBp   += SSBp;
0246   total_SSBp2  += pow(SSBp,2);
0247   total_SSB2p  += SSB2p;
0248   total_SSB2p2 += pow(SSB2p,2);
0249   total_SSB    += SSB;
0250   total_SSB2   += pow(SSB,2);
0251 
0252   total_DSBp   += DSBp;
0253   total_DSBp2  += pow(DSBp,2);
0254   total_DSBpp  += DSBpp;
0255   total_DSBpp2 += pow(DSBpp,2);
0256   total_DSB    += DSB;
0257   total_DSB2   += pow(DSB,2);
0258 
0259   }
0260 
0261 // Calculate the standard deviation
0262 SD_SSB   = sqrt(abs(((total_SSB2   / number) - pow(total_SSB   / number,2)))/(number -1));
0263 SD_SSBp  = sqrt(abs(((total_SSBp2  / number) - pow(total_SSBp  / number,2)))/(number -1));
0264 SD_SSB2p = sqrt(abs(((total_SSB2p2 / number) - pow(total_SSB2p / number,2)))/(number -1));
0265 
0266 SD_DSB   = sqrt(abs(((total_DSB2   / number) - pow(total_DSB   / number,2)))/(number -1));
0267 SD_DSBp  = sqrt(abs(((total_DSBp2  / number) - pow(total_DSBp  / number,2)))/(number -1));
0268 SD_DSBpp = sqrt(abs(((total_DSBpp2 / number) - pow(total_DSBpp / number,2)))/(number -1));
0269 
0270 // Read damage classification SSBd, SSBi, SSBm, DSBd, DSBi, DSBm, DSBh
0271 // As they have been defined in: Nikjoo, H., O’Neill, O., Goodhead, T., & Terrissol, M. 1997,
0272 // Computational modelling of low-energy electron-induced DNA damage by early physical
0273 // and chemical events, International Journal of Radiation Biology, 71, 467.
0274 tree = (TTree *) f->Get("tuples/source");
0275 tree->SetBranchAddress("Primary",primaryName);
0276 tree->SetBranchAddress("Energy", &Energy);
0277 tree->SetBranchAddress("SSBd",   &SSBd);
0278 tree->SetBranchAddress("SSBi",   &SSBi);
0279 tree->SetBranchAddress("SSBm",   &SSBm);
0280 tree->SetBranchAddress("DSBd",   &DSBd);
0281 tree->SetBranchAddress("DSBi",   &DSBi);
0282 tree->SetBranchAddress("DSBm",   &DSBm);
0283 tree->SetBranchAddress("DSBh",   &DSBh);
0284 
0285 Long64_t nentriesS = tree->GetEntries();
0286 for(int i = 0;i<nentriesS;i++){
0287   tree->GetEntry(i);
0288 
0289   total_SSBd += SSBd;
0290   total_SSBd2 += pow((SSBd),2);
0291   total_SSBi += SSBi;
0292   total_SSBi2 += pow((SSBi),2);
0293   total_SSBm += SSBm;
0294   total_SSBm2 += pow((SSBm),2);
0295   total_sSSB += SSBd + SSBi + SSBm;
0296   total_sSSB2 += pow((SSBd+SSBi+SSBm),2);
0297 
0298   total_DSBd  += DSBd;
0299   total_DSBd2 += pow(DSBd,2);
0300   total_DSBi  += DSBi;
0301   total_DSBi2 += pow(DSBi,2);
0302   total_DSBm  += DSBm;
0303   total_DSBm2 += pow(DSBm,2);
0304   total_DSBh  += DSBh;
0305   total_DSBh2 += pow(DSBh,2);
0306   total_sDSB  += DSBd + DSBi + DSBm + DSBh;
0307   total_sDSB2 += pow((DSBd+DSBi+DSBm+DSBh),2);
0308 
0309   }
0310 
0311 // Calculate the standard deviation
0312 SD_sSSB = sqrt(abs(((total_sSSB2 / number) - pow(total_sSSB / number,2)))/(number -1));
0313 SD_SSBd = sqrt(abs(((total_SSBd2 / number) - pow(total_SSBd / number,2)))/(number -1));
0314 SD_SSBi = sqrt(abs(((total_SSBi2 / number) - pow(total_SSBi / number,2)))/(number -1));
0315 SD_SSBm = sqrt(abs(((total_SSBm2 / number) - pow(total_SSBm / number,2)))/(number -1));
0316 
0317 SD_sDSB = sqrt(abs(((total_sDSB2 / number) - pow(total_sDSB / number,2)))/(number -1));
0318 SD_DSBd = sqrt(abs(((total_DSBd2 / number) - pow(total_DSBd / number,2)))/(number -1));
0319 SD_DSBi = sqrt(abs(((total_DSBi2 / number) - pow(total_DSBi / number,2)))/(number -1));
0320 SD_DSBm = sqrt(abs(((total_DSBm2 / number) - pow(total_DSBm / number,2)))/(number -1));
0321 SD_DSBh = sqrt(abs(((total_DSBh2 / number) - pow(total_DSBh / number,2)))/(number -1));
0322 
0323 
0324 // Measure the Deposited Energy in the whole volume that includes DNA chain
0325 
0326 tree = (TTree *) f->Get("tuples/chromosome_hits");
0327 tree->SetBranchAddress("e_chromosome_kev",&EnergyDeposited_eV);
0328 nentries = tree->GetEntries();
0329 for(int i = 0;i<nentries;i++){
0330   tree->GetEntry(i);
0331   acc_edep += EnergyDeposited_eV *1e3;
0332   acc_edep2 += EnergyDeposited_eV *EnergyDeposited_eV *1e6;
0333 }
0334 tree->SetBranchAddress("e_dna_kev",&EnergyDeposited_eV);
0335 nentries = tree->GetEntries();
0336 for(int i = 0;i<nentries;i++){
0337   tree->GetEntry(i);
0338   acc_edep += EnergyDeposited_eV *1e3;
0339   acc_edep2 += EnergyDeposited_eV *EnergyDeposited_eV *1e6;
0340 }
0341 
0342 // Close the root file to free space
0343 f->Close();
0344 
0345 // Calculate the absorbed dose
0346 dose = acc_edep * eVtoJ / mass;
0347 
0348 // This is a normalization factor to produce the output in Gy-1 Gbp-1, or else.
0349 // Default value is 1 to produce the result in Gy-1 Mbp-1
0350 // It changes Mbp to Gbp. Some other changes may be needed in graphs section (name of axes)
0351 double norm = 1;
0352 
0353 // Calculate the yields, together with their standard deviation
0354 EB_yield  = (Double_t) total_EB  / dose / Nbp;
0355 ES_yield  = (Double_t) total_ES  / dose / Nbp;
0356 OHB_yield = (Double_t) total_OHB / dose / Nbp;
0357 OHS_yield = (Double_t) total_OHS / dose / Nbp;
0358 HB_yield  = (Double_t) total_HB  / dose / Nbp;
0359 HS_yield  = (Double_t) total_HS  / dose / Nbp;
0360 
0361 SD_EB_yield  = SD_EB  / dose / Nbp;
0362 SD_ES_yield  = SD_ES  / dose / Nbp;
0363 SD_OHB_yield = SD_OHB / dose / Nbp;
0364 SD_OHS_yield = SD_OHS / dose / Nbp;
0365 SD_HB_yield  = SD_HB  / dose / Nbp;
0366 SD_HS_yield  = SD_HS  / dose / Nbp;
0367 
0368 
0369 SSB_yield   = (Double_t) norm * total_SSB   / dose / Nbp;
0370 SSBp_yield  = (Double_t) norm * total_SSBp  / dose / Nbp;
0371 SSB2p_yield = (Double_t) norm * total_SSB2p / dose / Nbp;
0372 
0373 DSB_yield   = (Double_t) norm * total_DSB   / dose / Nbp;
0374 DSBp_yield  = (Double_t) norm * total_DSBp  / dose / Nbp;
0375 DSBpp_yield = (Double_t) norm * total_DSBpp / dose / Nbp;
0376 
0377 SD_SSB_yield   = norm * SD_SSB   / dose / Nbp;
0378 SD_SSBp_yield  = norm * SD_SSBp  / dose / Nbp;
0379 SD_SSB2p_yield = norm * SD_SSB2p / dose / Nbp;
0380 
0381 SD_DSB_yield   = norm * SD_DSB   / dose / Nbp;
0382 SD_DSBp_yield  = norm * SD_DSBp  / dose / Nbp;
0383 SD_DSBpp_yield = norm * SD_DSBpp / dose / Nbp;
0384 
0385 
0386 sSSB_yield = (Double_t) norm * total_sSSB / dose / Nbp;
0387 SSBi_yield = (Double_t) norm * total_SSBi / dose / Nbp;
0388 SSBd_yield = (Double_t) norm * total_SSBd / dose / Nbp;
0389 SSBm_yield = (Double_t) norm * total_SSBm / dose / Nbp;
0390 
0391 sDSB_yield = (Double_t) norm * total_sDSB / dose / Nbp;
0392 DSBi_yield = (Double_t) norm * total_DSBi / dose / Nbp;
0393 DSBd_yield = (Double_t) norm * total_DSBd / dose / Nbp;
0394 DSBm_yield = (Double_t) norm * total_DSBm / dose / Nbp;
0395 DSBh_yield = (Double_t) norm * total_DSBh / dose / Nbp;
0396 
0397 SD_sSSB_yield = norm * SD_sSSB / dose / Nbp;
0398 SD_SSBi_yield = norm * SD_SSBi / dose / Nbp;
0399 SD_SSBd_yield = norm * SD_SSBd / dose / Nbp;
0400 SD_SSBm_yield = norm * SD_SSBm / dose / Nbp;
0401 
0402 SD_sDSB_yield = norm * SD_sDSB / dose / Nbp;
0403 SD_DSBi_yield = norm * SD_DSBi / dose / Nbp;
0404 SD_DSBd_yield = norm * SD_DSBd / dose / Nbp;
0405 SD_DSBm_yield = norm * SD_DSBm / dose / Nbp;
0406 SD_DSBh_yield = norm * SD_DSBh / dose / Nbp;
0407 
0408 
0409 // Print output in terminal
0410 
0411 float total_SSB_totalYield = SSB_yield + SSBp_yield + SSB2p_yield;
0412 float total_DSB_totalYield = DSB_yield + DSBp_yield + DSBpp_yield;
0413 
0414 cout<<"\n"                      <<ifile         <<'\n'
0415     <<"\nDose Absorbed (Gy): "  <<dose          <<'\n'
0416     <<"Particle : "             <<primaryName   <<'\t'
0417     <<"Energy (MeV) : "         <<Energy        <<'\t'
0418     <<"Number of Primaries : "  <<number        <<'\n'
0419     <<"  Output Damage : "                      <<'\n'<<'\t'
0420     <<"     Species Hits (Gy-1 Mbp-1) "      <<'\n'<<'\t'
0421     <<"EaqBaseHits   : "     <<EB_yield     <<"   \t"      <<" error %: "   <<100*SD_EB_yield/EB_yield        <<'\n'<<'\t'
0422     <<"EaqStrandHits : "     <<ES_yield     <<"   \t"      <<" error %: "   <<100*SD_ES_yield/ES_yield        <<'\n'<<'\t'
0423     <<"OHBaseHits    : "     <<OHB_yield    <<"   \t"      <<" error %: "   <<100*SD_OHB_yield/OHB_yield      <<'\n'<<'\t'
0424     <<"OHStrandHits  : "     <<OHS_yield    <<"   \t"      <<" error %: "   <<100*SD_OHS_yield/OHS_yield      <<'\n'<<'\t'
0425     <<"HBaseHits     : "     <<HB_yield     <<"   \t"      <<" error %: "   <<100*SD_HB_yield/HB_yield        <<'\n'<<'\t'
0426     <<"HStrandHits   : "     <<HS_yield     <<"   \t"      <<" error %: "   <<100*SD_HS_yield/HS_yield        <<'\n'<<'\n'<<'\t'
0427     <<"     Damage yield (Gy-1 Mbp-1) "      <<'\n'<<'\t'
0428     <<"SSB           : "     <<SSB_yield    <<"   \t"      <<" error %: "   <<100*SD_SSB_yield/SSB_yield      <<'\n'<<'\t'
0429     <<"SSB+          : "     <<SSBp_yield   <<"   \t"      <<" error %: "   <<100*SD_SSBp_yield/SSBp_yield    <<'\n'<<'\t'
0430     <<"2SSB          : "     <<SSB2p_yield  <<"   \t"      <<" error %: "   <<100*SD_SSB2p_yield/SSB2p_yield  <<'\n'<<'\t'
0431     <<"SSB total     : "     <<total_SSB_totalYield        <<'\n'<<'\t'
0432     <<"DSB           : "     <<DSB_yield    <<"   \t"      <<" error %: "   <<100*SD_DSB_yield/DSB_yield     <<'\n'<<'\t'
0433     <<"DSB+          : "     <<DSBp_yield   <<"   \t"      <<" error %: "   <<100*SD_DSBp_yield/DSBp_yield   <<'\n'<<'\t'
0434     <<"DSB++         : "     <<DSBpp_yield  <<"   \t"      <<" error %: "   <<100*SD_DSBpp_yield/DSBpp_yield <<'\n'<<'\t'
0435     <<"DSB total     : "     <<total_DSB_totalYield        <<'\n'<<'\n'<<'\t'
0436     <<"     Breaks yield (Gy-1 Mbp-1) "      <<'\n'<<'\t'
0437     <<"SSB direct    : "     <<SSBd_yield   <<"   \t"      <<" error %: "   <<100*SD_SSBd_yield/SSBd_yield   <<'\n'<<'\t'
0438     <<"SSB indirect  : "     <<SSBi_yield   <<"   \t"      <<" error %: "   <<100*SD_SSBi_yield/SSBi_yield   <<'\n'<<'\t'
0439     <<"SSB mixed     : "     <<SSBm_yield   <<"   \t"      <<" error %: "   <<100*SD_SSBm_yield/SSBi_yield   <<'\n'<<'\t'
0440     <<"SSB total     : "     <<sSSB_yield   <<"   \t"      <<" error %: "   <<100*SD_sSSB_yield/sSSB_yield   <<'\n'<<'\t'
0441     <<"DSB direct    : "     <<DSBd_yield   <<"   \t"      <<" error %: "   <<100*SD_DSBd_yield/DSBd_yield   <<'\n'<<'\t'
0442     <<"DSB indirect  : "     <<DSBi_yield   <<"   \t"      <<" error %: "   <<100*SD_DSBi_yield/DSBi_yield   <<'\n'<<'\t'
0443     <<"DSB mixed     : "     <<DSBm_yield   <<"   \t"      <<" error %: "   <<100*SD_DSBm_yield/DSBm_yield   <<'\n'<<'\t'
0444     <<"DSB hybrid    : "     <<DSBh_yield   <<"   \t"      <<" error %: "   <<100*SD_DSBh_yield/DSBh_yield   <<'\n'<<'\t'
0445     <<"DSB total     : "     <<sDSB_yield   <<"   \t"      <<" error %: "   <<100*SD_sDSB_yield/sDSB_yield   <<'\n'<<'\n'<<'\t'
0446     <<"SSB/DSB       : "     <<sSSB_yield/sDSB_yield       <<'\n'<<'\n';
0447 
0448 
0449 // Plot Histograms
0450 
0451 cfragment->GetCanvas()->cd();
0452 h1fragments->SetStats(false);
0453 h1fragments->SetMarkerSize(0.1);
0454 h1fragments->SetMarkerColor(kRed);
0455 h1fragments->SetLineColor  (kRed);
0456 h1fragments->Scale(1./(Nbp*1e6)); //bp^-1
0457 h1fragments->SetTitle("");
0458 h1fragments->SetYTitle("Number of Fragments (bp^{-2})");
0459 h1fragments->SetXTitle("Fragment Length (kbp)");
0460 //h1fragments->SetAxisRange(10,1e4);
0461 h1fragments->SetAxisRange(1,10);
0462 //h1fragments->SetMaximum(3e-11);
0463 //h1fragments->SetMinimum(1e-15);
0464 h1fragments->Draw();
0465 
0466 
0467 c1->GetCanvas()->cd();
0468 pad1->cd();
0469 const Int_t n = 6;
0470 Double_t x[n] = {1,2,3,4,5,6};
0471 Double_t y[n] = {EB_yield,ES_yield,OHB_yield,OHS_yield,HB_yield,HS_yield};
0472 Double_t err_y[n] = {SD_EB_yield,SD_ES_yield,SD_OHB_yield,SD_OHS_yield,SD_HB_yield,SD_HS_yield};
0473 TGraph* gr = new TGraphErrors(n,x,y,0,err_y);
0474 gr->SetTitle("Species");
0475 gr->GetXaxis()->SetBinLabel(9, "EaqBaseHits");
0476 gr->GetXaxis()->SetBinLabel(25,"EaqStrandHits");
0477 gr->GetXaxis()->SetBinLabel(42,"OHBaseHits");
0478 gr->GetXaxis()->SetBinLabel(58,"OHStrandHits");
0479 gr->GetXaxis()->SetBinLabel(75,"HBaseHits");
0480 gr->GetXaxis()->SetBinLabel(92,"HStrandHits");
0481 gr->GetYaxis()->SetTitle("Species Hits (Gy^{-1} Mbp^{-1})");
0482 gr->GetYaxis()->SetTitleOffset(2);
0483 
0484 gr->SetFillColor(49);
0485 gr->Draw("ba");
0486 
0487 
0488 pad2->cd();
0489 Double_t x2[n] = {1,2,3,4,5,6};
0490 Double_t y2[n] = {SSBp_yield,SSB2p_yield,SSB_yield,DSBp_yield,DSBpp_yield,DSB_yield};
0491 Double_t err_y2[n] = {SD_SSBp_yield,SD_SSB2p_yield,SD_SSB_yield,SD_DSBp_yield,SD_DSBpp_yield,SD_DSB_yield};
0492 TGraph* gr2 = new TGraphErrors(n,x2,y2,0,err_y2);
0493 gr2->SetTitle("Damage Yield");
0494 gr2->GetXaxis()->SetBinLabel(9, "SSB+");
0495 gr2->GetXaxis()->SetBinLabel(25,"2SSB");
0496 gr2->GetXaxis()->SetBinLabel(42,"SSB");
0497 gr2->GetXaxis()->SetBinLabel(58,"DSB+");
0498 gr2->GetXaxis()->SetBinLabel(75,"DSB++");
0499 gr2->GetXaxis()->SetBinLabel(92,"DSB");
0500 gr2->GetYaxis()->SetTitle("Damage yield (Gy^{-1} Mbp^{-1})");
0501 //gr2->GetYaxis()->SetTitle("Damage yield (particle^{-1})");
0502 gr2->GetYaxis()->SetTitleOffset(2);
0503 
0504 gr2->SetFillColor(8);
0505 gr2->Draw("ba");
0506 
0507 
0508 pad3->cd();
0509 const Int_t m = 4;
0510 Double_t x3[m] = {1,2,3,4};
0511 Double_t y3[m] = {SSBd_yield,SSBi_yield,SSBm_yield,sSSB_yield};
0512 Double_t err_y3[m] = {SD_SSBd_yield,SD_SSBi_yield,SD_SSBm_yield,SD_sSSB_yield};
0513 TGraph* gr3 = new TGraphErrors(m,x3,y3,0,err_y3);
0514 gr3->SetTitle("Breaks Yield");
0515 gr3->GetXaxis()->SetBinLabel(8, "SSB direct");
0516 gr3->GetXaxis()->SetBinLabel(35,"SSB indirect");
0517 gr3->GetXaxis()->SetBinLabel(64,"SSB mixed");
0518 gr3->GetXaxis()->SetBinLabel(92,"SSB all");
0519 gr3->GetYaxis()->SetTitle("Breaks yield (Gy^{-1} Mbp^{-1})");
0520 //gr3->GetYaxis()->SetTitle("SSB yield (particle^{-1}");
0521 gr3->GetYaxis()->SetTitleOffset(2);
0522 
0523 gr3->SetFillColor(7);
0524 gr3->Draw("ba");
0525 
0526 
0527 pad4->cd();
0528 const Int_t k = 5;
0529 Double_t x4[k] = {1,2,3,4,5};
0530 Double_t y4[k] = {DSBd_yield,DSBi_yield,DSBm_yield,DSBh_yield,sDSB_yield};
0531 Double_t err_y4[k] = {SD_DSBd_yield,SD_DSBi_yield,SD_DSBm_yield,SD_DSBh_yield,SD_sDSB_yield};
0532 TGraph* gr4 = new TGraphErrors(k,x4,y4,0,err_y4);
0533 gr4->SetTitle("Breaks Yield");
0534 gr4->GetXaxis()->SetBinLabel(8,"DSB direct");
0535 gr4->GetXaxis()->SetBinLabel(29,"DSB indirect");
0536 gr4->GetXaxis()->SetBinLabel(50,"DSB mixed");
0537 gr4->GetXaxis()->SetBinLabel(71,"DSB hybrid");
0538 gr4->GetXaxis()->SetBinLabel(92,"DSB all");
0539 gr4->GetYaxis()->SetTitle("Breaks yield (Gy^{-1} Mbp^{-1})");
0540 //gr4->GetYaxis()->SetTitle("DSB yield (particle^{-1})");
0541 gr4->GetYaxis()->SetTitleOffset(2);
0542 
0543 gr4->SetFillColor(4);
0544 gr4->Draw("ba");
0545 
0546 }
0547 
0548 // Some important bools that are needed to run the root macro file
0549 bool greaterPair(const ipair& l, const ipair& r){return l.second > r.second;}
0550 bool smallerPair(const ipair& l, const ipair& r){return l.second < r.second;}
0551 
0552 void BinLogX(TH1 *h) {
0553   TAxis *axis = h->GetXaxis();
0554   int bins = axis->GetNbins();
0555   Axis_t from = axis->GetXmin();
0556   Axis_t to = axis->GetXmax();
0557   Axis_t width = (to - from) / bins;
0558   Axis_t *new_bins = new Axis_t[bins + 1];
0559   for (int i = 0; i <= bins; i++) {
0560     new_bins[i] = TMath::Power(10, from + i * width);
0561   }
0562   axis->Set(bins, new_bins);
0563   delete[] new_bins;
0564 
0565 }