154 Double_t high = 5000.;
155 Int_t nofBins = 10000;
157 bool usetimestamps =
true;
158 Double_t ggTlow = 0.0;
159 Double_t ggThigh = 20.0;
184 std::array<double, 2> gEnergy = {1332.5, 1173.2};
185 double gEnergyErr = 5.0;
186 double gEnergySumErr = gEnergyErr;
190 int gEnergyIndex1 = 0;
192 std::vector<int> MissingClovers = {};
193 double DetectorHeight = 145.0;
197 std::list<int> NonCo_CryNums;
198 std::list<double> NonCo_Energies;
199 std::list<int> NonCo_Entries;
205 auto* list =
new TList;
207 auto* XiHist2DGeo_DetDet =
new TH2D(
"XiHist2D_DetDetCoincidenceTheta_Geo",
"Possible #xi Angles in GRIFFIN Array for Coincidence Angle #theta (Measured from Clover Faces)", XiBins, 0.0, 180.000001, ThetaBins, 0.0, 180.000001);
208 list->Add(XiHist2DGeo_DetDet);
209 auto* XiHist2DGeo_CryCry =
new TH2D(
"XiHist2D_CryCryCoincidenceTheta_Geo",
"Possible #xi Angles in GRIFFIN Array for Coincidence Angle #theta (Measured from Crystal Positions)", XiBins, 0.0, 180.000001, ThetaBins, 0.0, 180.000001);
210 list->Add(XiHist2DGeo_CryCry);
212 auto* XiHist2D_DetDet =
new TH2D(
"XiHist2D_DetDetCoincidenceTheta",
"Measured #xi Angles for Coincidence Angle #theta (Measured from Clover Faces)", XiBins, 0.0, 180.000001, ThetaBins, 0.0, 180.000001);
213 list->Add(XiHist2D_DetDet);
214 auto* XiHist2D_CryCry =
new TH2D(
"XiHist2D_CryCryCoincidenceTheta",
"Measured #xi Angles for Coincidence Angle #theta (Measured from Crystal Positions)", XiBins, 0.0, 180.000001, ThetaBins, 0.0, 180.000001);
215 list->Add(XiHist2D_CryCry);
217 auto* XiHist2DNonCo_DetDet =
new TH2D(
"XiHist2D_DetDetCoincidenceTheta_NonCo",
"Measured #xi Angles for Non-Coincidenct #gamma_{1} and #gamma_{2} at Angle #theta (Measured from Clover Faces)", XiBins, 0.0, 180.000001, ThetaBins, 0.0, 180.000001);
218 list->Add(XiHist2DNonCo_DetDet);
219 auto* XiHist2DNonCo_CryCry =
new TH2D(
"XiHist2D_CryCryCoincidenceTheta_NonCo",
"Measured #xi Angles for Non-Coincidenct #gamma_{1} and #gamma_{2} at Angle #theta (Measured from Crystal Positions)", XiBins, 0.0, 180.000001, ThetaBins, 0.0, 180.000001);
220 list->Add(XiHist2DNonCo_CryCry);
222 auto* gammaSinglesAll =
new TH1D(
"gammaSingles",
"#gamma singles (All Events);Energy [keV]", nofBins, low, high);
223 list->Add(gammaSinglesAll);
224 auto* gammagammaAll =
new TH2D(
"gammagamma",
"#gamma - #gamma (All Events);Energy [keV];Energy [keV]", nofBins, low, high, nofBins, low, high);
225 list->Add(gammagammaAll);
226 auto* gammaCrystalAll =
new TH2D(
"gammaCrystal",
"#gamma Crystal (All Events);Energy [keV];Crystal Number", nofBins, low, high, 64, 0, 64);
227 list->Add(gammaCrystalAll);
228 auto* XiCrystalGeo =
new TH2D(
"XiCrystalGeo",
"Possible #xi Crystal (All Events);#xi;Crystal Number", XiBins, 0.0, 180.000001, 64, 0, 64);
229 list->Add(XiCrystalGeo);
230 auto* thetaCrystalGeo =
new TH2D(
"thetaCrystalGeo",
"Possible #theta Crystal (All Events);#theta;Crystal Number", ThetaBins, 0.0, 180.000001, 64, 0, 64);
231 list->Add(thetaCrystalGeo);
232 auto* XiCrystalAll =
new TH2D(
"XiCrystal",
"#xi Crystal (All Events);#xi;Crystal Number", XiBins, 0.0, 180.000001, 64, 0, 64);
233 list->Add(XiCrystalAll);
234 auto* thetaCrystalAll =
new TH2D(
"thetaCrystal",
"#theta Crystal (All Events);#theta;Crystal Number", ThetaBins, 0.0, 180.000001, 64, 0, 64);
235 list->Add(thetaCrystalAll);
236 auto* gammaXi_g1 =
new TH2D(
"gammaXi_g1",
"#xi - #gamma (Only #gamma_{1} from Triple Coincidence);#xi;Energy [keV]", XiBins, 0.0, 180.000001, nofBins, low, high);
237 list->Add(gammaXi_g1);
238 auto* gammaXi_g2 =
new TH2D(
"gammaXi_g2",
"#xi - #gamma (Only #gamma_{2} from Triple Coincidence);#xi;Energy [keV]", XiBins, 0.0, 180.000001, nofBins, low, high);
239 list->Add(gammaXi_g2);
240 auto* gammaSingles_g1 =
new TH1D(
"gammaSingles_g1",
"#gamma singles (Only #gamma_{1} from Triple Coincidence);Energy [keV]", nofBins, low, high);
241 list->Add(gammaSingles_g1);
242 auto* gammaSingles_g2 =
new TH1D(
"gammaSingles_g2",
"#gamma singles (Only #gamma_{2} from Triple Coincidence);Energy [keV]", nofBins, low, high);
243 list->Add(gammaSingles_g2);
244 auto* gammaSingles_g3 =
new TH1D(
"gammaSingles_g3",
"#gamma singles (Only #gamma_{3} from Triple Coincidence);Energy [keV]", nofBins, low, high);
245 list->Add(gammaSingles_g3);
246 auto* ggTimeDiff_g1g2 =
new TH1D(
"ggTimeDiff_g1g2",
"#gamma_{1}-#gamma_{2} time difference", 300, 0, 300);
247 list->Add(ggTimeDiff_g1g2);
248 auto* ggTimeDiff_g1g3 =
new TH1D(
"ggTimeDiff_g1g3",
"#gamma_{1}-#gamma_{3} time difference", 300, 0, 300);
249 list->Add(ggTimeDiff_g1g3);
250 auto* ggTimeDiff_g2g3 =
new TH1D(
"ggTimeDiff_g2g3",
"#gamma_{2}-#gamma_{3} time difference", 300, 0, 300);
251 list->Add(ggTimeDiff_g2g3);
257 if(maxEntries == 0 || maxEntries > tree->GetEntries()) {
258 maxEntries = tree->GetEntries();
261 tree->SetBranchAddress(
"TGriffin", &grif);
270 for(one = 0; one < 64; one++) {
271 if(std::binary_search(MissingClovers.begin(), MissingClovers.end(), one / 4 + 1)) {
continue; }
274 for(two = (one / 4) * 4; two < (one / 4 + 1) * 4; two++) {
275 if(one == two) {
continue; }
277 for(three = 0; three < 64; three++) {
278 if(three / 4 == one / 4) {
continue; }
279 if(std::binary_search(MissingClovers.begin(), MissingClovers.end(), three / 4 + 1)) {
continue; }
285 Xi = n1.Angle(n2) * TMath::RadToDeg();
286 CoTheta = v3.Angle(v1) * TMath::RadToDeg();
288 std::cout << one <<
", " << two <<
", " << three <<
": " << Xi <<
", " << d1.Angle(d2) * TMath::RadToDeg() <<
", " << CoTheta << std::endl;
289 XiHist2DGeo_DetDet->Fill(Xi, TMath::RadToDeg() * d1.Angle(d2));
290 XiHist2DGeo_CryCry->Fill(Xi, CoTheta);
291 XiCrystalGeo->Fill(Xi, one);
292 thetaCrystalGeo->Fill(CoTheta, one);
307 std::cout <<
"Starting event analysis (Section 2) after " << w->RealTime() <<
" seconds" << std::endl;
311 int PrintRate = 1000;
312 while(PrintRate >= maxEntries) {
321 for(
int entry = 1; entry < maxEntries; ++entry) {
322 if(entry == 1 || entry == maxEntries - 1 || entry % (maxEntries / PrintRate) == 0) {
323 std::cout <<
"\r\t\t\t\t\t\t\t\t "
324 <<
"\rOn entry: " << std::setw(10) << std::right << entry + 1 <<
"/" << std::setw(10) << std::left << maxEntries <<
" (" << std::setw(3) << std::right << static_cast<int>(
static_cast<double>(100 * (entry + 1)) /
static_cast<double>(maxEntries)) <<
"%)";
326 tree->GetEntry(entry);
336 NonCo_Entries.push_back(entry);
343 for(
int NonCo_Entry : NonCo_Entries) {
347 if(NonCo_Entry < entry - 11) { counter++; }
349 for(
int i = 0; i < counter; i++) {
350 NonCo_Entries.pop_front();
351 NonCo_Energies.pop_front();
352 NonCo_CryNums.pop_front();
366 if(two == one) {
continue; }
376 if(ggTlow > TMath::Abs(tg2 - tg1) || TMath::Abs(tg2 - tg1) > ggThigh) {
continue; }
390 if(ForceG1 && gEnergyIndex1 != 0) {
continue; }
403 for(three = 0; three < static_cast<int>(grif->
GetMultiplicity()); ++three) {
406 if(one == three || two == three) {
continue; }
408 if(TMath::Abs(gEnergy[1 - gEnergyIndex1] - grif->
GetGriffinHit(three)->
GetEnergy()) > gEnergyErr) {
continue; }
412 tg3 =
static_cast<int>(grif->
GetGriffinHit(three)->GetTime());
415 bool TimeCoincident = ggTlow < TMath::Abs(tg3 - tg1) && TMath::Abs(tg3 - tg1) < ggThigh && ggTlow < TMath::Abs(tg3 - tg2) && TMath::Abs(tg3 - tg2) < ggThigh;
416 ggTimeDiff_g1g2->Fill(TMath::Abs(tg2 - tg1));
417 ggTimeDiff_g1g3->Fill(TMath::Abs(tg3 - tg1));
418 ggTimeDiff_g2g3->Fill(TMath::Abs(tg3 - tg2));
427 Xi = n1.Angle(n2) * TMath::RadToDeg();
428 CoTheta = v3.Angle(v1) * TMath::RadToDeg();
431 XiHist2D_DetDet->Fill(Xi, TMath::RadToDeg() * d1.Angle(d2));
432 XiHist2D_CryCry->Fill(Xi, CoTheta);
449 auto it_Energy = NonCo_Energies.begin();
450 auto it_CryNum = NonCo_CryNums.begin();
451 for(
int NonCo_Entry : NonCo_Entries) {
452 if(NonCo_Entry <= entry - 2) {
453 double Energy3 = *it_Energy;
454 int CrystalNum = *it_CryNum;
455 if((grif->
GetGriffinHit(one)->
GetDetector() != CrystalNum / 4 + 1) && (TMath::Abs(gEnergy[1 - gEnergyIndex1] - Energy3) < gEnergyErr)) {
461 Xi = n1.Angle(n2) * TMath::RadToDeg();
462 CoTheta = v3.Angle(v1) * TMath::RadToDeg();
464 XiHist2DNonCo_DetDet->Fill(Xi, TMath::RadToDeg() * d1.Angle(d2));
465 XiHist2DNonCo_CryCry->Fill(Xi, CoTheta);
481 XiHist2DGeo_DetDet->GetXaxis()->SetTitle(
"Experimental Angle #xi (#circ)");
482 XiHist2DGeo_DetDet->GetXaxis()->CenterTitle();
483 XiHist2DGeo_DetDet->GetYaxis()->SetTitle(
"Coincidence Angle #theta (#circ)");
484 XiHist2DGeo_DetDet->GetYaxis()->CenterTitle();
485 XiHist2DGeo_DetDet->GetZaxis()->SetTitle(
"Counts");
486 XiHist2DGeo_DetDet->GetZaxis()->CenterTitle();
487 XiHist2DGeo_DetDet->SetMarkerStyle(24);
488 XiHist2DGeo_DetDet->SetMarkerColor(kRed);
489 XiHist2DGeo_DetDet->SetMarkerSize(0.5);
491 XiHist2DGeo_CryCry->GetXaxis()->SetTitle(
"Experimental Angle #xi (#circ)");
492 XiHist2DGeo_CryCry->GetXaxis()->CenterTitle();
493 XiHist2DGeo_CryCry->GetYaxis()->SetTitle(
"Coincidence Angle #theta (#circ)");
494 XiHist2DGeo_CryCry->GetYaxis()->CenterTitle();
495 XiHist2DGeo_CryCry->GetZaxis()->SetTitle(
"Counts");
496 XiHist2DGeo_CryCry->GetZaxis()->CenterTitle();
497 XiHist2DGeo_CryCry->SetMarkerStyle(24);
498 XiHist2DGeo_CryCry->SetMarkerColor(kRed);
499 XiHist2DGeo_CryCry->SetMarkerSize(0.5);
501 XiHist2DNonCo_DetDet->GetXaxis()->SetTitle(
"Experimental Angle #xi (#circ)");
502 XiHist2DNonCo_DetDet->GetXaxis()->CenterTitle();
503 XiHist2DNonCo_DetDet->GetYaxis()->SetTitle(
"Coincidence Angle #theta (#circ)");
504 XiHist2DNonCo_DetDet->GetYaxis()->CenterTitle();
505 XiHist2DNonCo_DetDet->GetZaxis()->SetTitle(
"Counts");
506 XiHist2DNonCo_DetDet->GetZaxis()->CenterTitle();
507 XiHist2DNonCo_DetDet->SetMarkerStyle(24);
508 XiHist2DNonCo_DetDet->SetMarkerColor(kRed);
509 XiHist2DNonCo_DetDet->SetMarkerSize(0.5);
511 XiHist2DNonCo_CryCry->GetXaxis()->SetTitle(
"Experimental Angle #xi (#circ)");
512 XiHist2DNonCo_CryCry->GetXaxis()->CenterTitle();
513 XiHist2DNonCo_CryCry->GetYaxis()->SetTitle(
"Coincidence Angle #theta (#circ)");
514 XiHist2DNonCo_CryCry->GetYaxis()->CenterTitle();
515 XiHist2DNonCo_CryCry->GetZaxis()->SetTitle(
"Counts");
516 XiHist2DNonCo_CryCry->GetZaxis()->CenterTitle();
517 XiHist2DNonCo_CryCry->SetMarkerStyle(24);
518 XiHist2DNonCo_CryCry->SetMarkerColor(kRed);
519 XiHist2DNonCo_CryCry->SetMarkerSize(0.5);
521 XiHist2D_DetDet->GetXaxis()->SetTitle(
"Experimental Angle #xi (#circ)");
522 XiHist2D_DetDet->GetXaxis()->CenterTitle();
523 XiHist2D_DetDet->GetYaxis()->SetTitle(
"Coincidence Angle #theta (#circ)");
524 XiHist2D_DetDet->GetYaxis()->CenterTitle();
525 XiHist2D_DetDet->GetZaxis()->SetTitle(
"Counts");
526 XiHist2D_DetDet->GetZaxis()->CenterTitle();
527 XiHist2D_DetDet->SetMarkerSize(0.5);
528 XiHist2D_DetDet->SetMarkerStyle(20);
530 XiHist2D_CryCry->GetXaxis()->SetTitle(
"Experimental Angle #xi (#circ)");
531 XiHist2D_CryCry->GetXaxis()->CenterTitle();
532 XiHist2D_CryCry->GetYaxis()->SetTitle(
"Coincidence Angle #theta (#circ)");
533 XiHist2D_CryCry->GetYaxis()->CenterTitle();
534 XiHist2D_CryCry->GetZaxis()->SetTitle(
"Counts");
535 XiHist2D_CryCry->GetZaxis()->CenterTitle();
536 XiHist2D_CryCry->SetMarkerSize(0.5);
537 XiHist2D_CryCry->SetMarkerStyle(20);
539 std::cout << std::endl;