#include "SabreArray.h" #include #include #include #include "TFile.h" #include "TTree.h" SabreArray::SabreArray() : DetectorArray(), m_deadlayerEloss({14}, {28}, {1}, s_deadlayerThickness), m_detectorEloss({14}, {28}, {1}, s_detectorThickness), m_degraderEloss({73}, {181}, {1}, s_degraderThickness) { for(int i=0; iGet("SimTree"); std::vector* dataHandle = new std::vector(); intree->SetBranchAddress("nuclei", &dataHandle); output->cd(); TTree* outtree = new TTree("SimTree", "SimTree"); outtree->Branch("nuclei", dataHandle); input->cd(); stats<<"Efficiency statistics for data from "<GetEntry(1); std::vector counts; std::vector coinc_counts; counts.resize(dataHandle->size()); switch(counts.size()) { case 3: coinc_counts.resize(1, 0); break; case 4: coinc_counts.resize(1, 0); break; case 6: coinc_counts.resize(4, 0); break; case 8: coinc_counts.resize(11, 0); break; default: { std::cerr<<"Bad reaction type at AnasenEfficiency::CalculateEfficiency (given value: "<Close(); output->Close(); stats.close(); return; } } uint64_t nentries = intree->GetEntries(); uint64_t percent5 = nentries*0.05; uint64_t count = 0; uint64_t npercent = 0; Mask::Nucleus nucleus; for(uint64_t i=0; iGetEntry(i); if(++count == percent5) {//Show progress every 5% npercent++; count = 0; std::cout<<"\rPercent completed: "<size(); j++) { Mask::Nucleus& nucleus = (*dataHandle)[j]; DetectorResult result = IsSabre(nucleus); if(result.detectFlag) { nucleus.isDetected = true; nucleus.detectedKE = result.energy_deposited; nucleus.detectedTheta = result.direction.Theta(); nucleus.detectedPhi = result.direction.Phi(); counts[j]++; } } CountCoincidences(*dataHandle, coinc_counts); outtree->Fill(); } input->Close(); output->cd(); outtree->Write(outtree->GetName(), TObject::kOverwrite); output->Close(); delete dataHandle; stats< ringxs, ringys, ringzs; std::vector wedgexs, wedgeys, wedgezs; ROOT::Math::XYZPoint coords; for(int i=0; i& data, std::vector& counts) { if (data.size() == 3 && data[1].isDetected && data[2].isDetected) { counts[0]++; } else if (data.size() == 4 && data[2].isDetected && data[3].isDetected) { counts[0]++; } else if(data.size() == 6) { if(data[2].isDetected && data[4].isDetected) { counts[0]++; } if(data[2].isDetected && data[5].isDetected) { counts[1]++; } if(data[4].isDetected && data[5].isDetected) { counts[2]++; } if(data[2].isDetected && data[4].isDetected && data[5].isDetected) { counts[3]++; } } else if(data.size() == 8) { if(data[2].isDetected && data[4].isDetected) { counts[0]++; } if(data[2].isDetected && data[6].isDetected) { counts[1]++; } if(data[2].isDetected && data[7].isDetected) { counts[2]++; } if(data[4].isDetected && data[6].isDetected) { counts[3]++; } if(data[4].isDetected && data[7].isDetected) { counts[4]++; } if(data[6].isDetected && data[7].isDetected) { counts[5]++; } if(data[2].isDetected && data[4].isDetected && data[6].isDetected) { counts[6]++; } if(data[2].isDetected && data[4].isDetected && data[7].isDetected) { counts[7]++; } if(data[2].isDetected && data[6].isDetected && data[7].isDetected) { counts[8]++; } if(data[4].isDetected && data[6].isDetected && data[7].isDetected) { counts[9]++; } if(data[2].isDetected && data[4].isDetected && data[6].isDetected && data[7].isDetected) { counts[10]++; } } }