#include "TROOT.h" #include "TChain.h" #include "TFile.h" #include "TString.h" #include "TH1D.h" #include "TRandom3.h" #include "TVectorD.h" #include using std::cout; using std::endl; #include using std::map; #include using std::pair; using std::make_pair; #include using std::ifstream; using std::ofstream; #include using std::string; void extractSpectra(TString inFileName, TString outFileName) { const UShort_t chargeBoard = 1; const UShort_t chargeChannel = 7; TChain inChain("Data_F"); inChain.Add(inFileName + "*.root"); UShort_t board, channel, energy; ULong_t timestamp; inChain.SetBranchStatus("*", 0); inChain.SetBranchStatus("Board", 1); inChain.SetBranchAddress("Board", &board); inChain.SetBranchStatus("Channel", 1); inChain.SetBranchAddress("Channel", &channel); inChain.SetBranchStatus("Energy", 1); inChain.SetBranchAddress("Energy", &energy); inChain.SetBranchStatus("Timestamp", 1); inChain.SetBranchAddress("Timestamp", ×tamp); map > histograms; map > firstEventTimeStamp; map > lastEventTimeStamp; TFile outFile(outFileName, "RECREATE"); for (int iBoard = 0; iBoard < 2; iBoard++) { for (int iChannel = 0; iChannel < 8; iChannel++) { TString histoName = TString::Format("h%i-%i", iBoard, iChannel); histograms[iBoard][iChannel] = TH1D(histoName, histoName, 8192, 0, 8192); firstEventTimeStamp[iBoard][iChannel] = 0; lastEventTimeStamp[iBoard][iChannel] = 0; } } const size_t nEntries = inChain.GetEntries(); cout << "Filling spectra." << endl; for (size_t iEntry = 0; iEntry < nEntries; iEntry++) { inChain.GetEntry(iEntry); histograms[board][channel].Fill(energy); if (firstEventTimeStamp[board][channel] == 0) { firstEventTimeStamp[board][channel] = timestamp; } lastEventTimeStamp[board][channel] = timestamp; } cout << endl; cout << "Writing spectra to file:" << endl; outFile.cd(); for (int iBoard = 0; iBoard < 2; iBoard++) { ULong_t lastTimeStampForThisBoard = 0; for (int iChannel = 0; iChannel < 8; iChannel++) { cout << " * " << histograms[iBoard][iChannel].GetName() << ": " << histograms[iBoard][iChannel].GetEntries() << " entries" << endl; histograms[iBoard][iChannel].Write("", TObject::kOverwrite); if (lastTimeStampForThisBoard < lastEventTimeStamp[iBoard][iChannel]) { lastTimeStampForThisBoard = lastEventTimeStamp[iBoard][iChannel]; } } TVectorD lastTimeStamp(1); lastTimeStamp[0] = 1e-12*lastTimeStampForThisBoard; lastTimeStamp.Write(TString::Format("lastTimeStampSeconds-%i", iBoard)); } cout << endl; } int main() { TString inFileName = "../rootfiles/run_324/UNFILTERED/compass_run_324.root"; TString OutFileName = "spectra.root"; cout<