From e3ffe563518dcb088501f9e35ef53f409df604af Mon Sep 17 00:00:00 2001 From: James Szalkie Date: Thu, 12 Mar 2026 12:00:38 -0400 Subject: [PATCH] ROOT tinkering --- Armory/ANASEN_model.C | 2 + Armory/ClassPW.h | 45 ++++-- Armory/Makefile | 7 +- Armory/anasenMS_root | Bin 0 -> 229104 bytes Armory/anasenMS_root.cpp | 309 +++++++++++++++++++++++++++++++++++++++ Armory/run_script.C | 4 + Armory/test_run.C | 7 + Armory/vis_helpers.h | 34 +++++ Armory/vis_inproc | Bin 0 -> 29704 bytes Armory/vis_inproc.cpp | 65 ++++++++ 10 files changed, 458 insertions(+), 15 deletions(-) create mode 100755 Armory/anasenMS_root create mode 100644 Armory/anasenMS_root.cpp create mode 100644 Armory/run_script.C create mode 100644 Armory/test_run.C create mode 100644 Armory/vis_helpers.h create mode 100755 Armory/vis_inproc create mode 100644 Armory/vis_inproc.cpp diff --git a/Armory/ANASEN_model.C b/Armory/ANASEN_model.C index 72bc262..8f1e952 100644 --- a/Armory/ANASEN_model.C +++ b/Armory/ANASEN_model.C @@ -119,3 +119,5 @@ void ANASEN_model(int anodeID1 = -1, int anodeID2 = -1, int cathodeID1 = -1, int geom->SetVisLevel(4); worldBox->Draw("ogle"); } + + diff --git a/Armory/ClassPW.h b/Armory/ClassPW.h index 9cce5ae..0fd64bc 100755 --- a/Armory/ClassPW.h +++ b/Armory/ClassPW.h @@ -91,7 +91,8 @@ public: void ConstructGeo(); void FindWireID(TVector3 pos, TVector3 direction, bool verbose = false); void CalTrack(TVector3 sx3Pos, int anodeID, int cathodeID, bool verbose = false); - void CalTrack2(TVector3 sx3Pos, TVector3 anodeInt, bool verbose = false); + //void CalTrack2(TVector3 sx3Pos, TVector3 anodeInt, bool verbose = false); + void CalTrack2(TVector3 sx3Pos, PWHitInfo hitInfo, double sigmaA, double sigmaC, bool verbose); void Print() { @@ -447,21 +448,41 @@ inline void PW::CalTrack(TVector3 sx3Pos, int anodeID, int cathodeID, bool verbo } -inline void PW::CalTrack2(TVector3 siPos, TVector3 anodeInt, bool verbose) +inline void PW::CalTrack2(TVector3 sx3Pos, PWHitInfo hitInfo, double sigmaA, double sigmaC, bool verbose) { - double mx, my; - double z; - mx = siPos.X() / (siPos.X() - anodeInt.X()); - my = siPos.Y() / (siPos.Y() - anodeInt.Y()); - z=siPos.Z() + mx * (anodeInt.Z() - siPos.Z()); - // if (mx == my) - { - trackVec=TVector3(0,0,z); - } + trackPos = sx3Pos; + + double p1 = TMath::Abs(hitInfo.nearestDist.first + gRandom->Gaus(0, sigmaA)); + double p2 = TMath::Abs(hitInfo.nextNearestDist.first + gRandom->Gaus(0, sigmaA)); + double fracA = p1 / (p1 + p2); + short anodeID1 = hitInfo.nearestWire.first; + short anodeID2 = hitInfo.nextNearestWire.first; + TVector3 shiftA1 = (An[anodeID2].first - An[anodeID1].first) * fracA; + TVector3 shiftA2 = (An[anodeID2].second - An[anodeID1].second) * fracA; + + double q1 = TMath::Abs(hitInfo.nearestDist.second + gRandom->Gaus(0, sigmaC)); + double q2 = TMath::Abs(hitInfo.nextNearestDist.second + gRandom->Gaus(0, sigmaC)); + double fracC = q1 / (q1 + q2); + short cathodeID1 = hitInfo.nearestWire.second; + short cathodeID2 = hitInfo.nextNearestWire.second; + TVector3 shiftC1 = (Ca[cathodeID2].first - Ca[cathodeID1].first) * fracC; + TVector3 shiftC2 = (Ca[cathodeID2].second - Ca[cathodeID1].second) * fracC; + + TVector3 a1 = An[anodeID1].first + shiftA1; + TVector3 a2 = An[anodeID1].second + shiftA2; + + TVector3 c1 = Ca[cathodeID1].first + shiftC1; + TVector3 c2 = Ca[cathodeID1].second + shiftC2; + + TVector3 n1 = (a1 - a2).Cross((sx3Pos - a2)).Unit(); + TVector3 n2 = (c1 - c2).Cross((sx3Pos - c2)).Unit(); + + // if the handiness of anode and cathode revered, it should be n2 cross n1 + trackVec = (n2.Cross(n1)).Unit(); if (verbose) - printf("X slope = %f and Y slope = %f \n", mx, my); + printf("Theta, Phi = %f, %f \n", trackVec.Theta() * TMath::RadToDeg(), trackVec.Phi() * TMath::RadToDeg()); } /*inline TVector3 PW::CalTrack3(TVector3 siPos, TVector3 anodeInt, bool verbose) diff --git a/Armory/Makefile b/Armory/Makefile index 2ff7b6f..6693ef3 100644 --- a/Armory/Makefile +++ b/Armory/Makefile @@ -23,10 +23,11 @@ Mapper : Mapper.cpp ../mapping.h ClassDet.h @echo "--------- making Mapper" $(CC) $(COPTS) -o Mapper Mapper.cpp $(ROOTLIBS) -# AnasenMS : constant.h Isotope.h ClassTransfer.h ClassSX3.h ClassPW.h ClassAnasen.h anasenMS.cpp -# @echo "--------- making ANASEN Monte Carlo" -# $(CC) $(COPTS) -o AnasenMS anasenMS.cpp $(ROOTLIBS) +AnasenMS : constant.h Isotope.h ClassTransfer.h ClassSX3.h ClassPW.h ClassAnasen.h anasenMS.cpp + @echo "--------- making ANASEN Monte Carlo" + $(CC) $(COPTS) -o AnasenMS anasenMS.cpp $(ROOTLIBS) EventBuilder : EventBuilder.cpp ClassData.h fsuReader.h Hit.h @echo "--------- making EventBuilder" $(CC) $(COPTS) -o EventBuilder EventBuilder.cpp $(ROOTLIBS) + diff --git a/Armory/anasenMS_root b/Armory/anasenMS_root new file mode 100755 index 0000000000000000000000000000000000000000..cdb335e3e2464d0d510aff5c5597318105c4187f GIT binary patch literal 229104 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 c)AfGTtJk0h;g6v5%X>6B#Wa)!tgp`h2QW +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "TRandom.h" +#include "TFile.h" +#include "TTree.h" +#include "TH1.h" +#include "TH2.h" +#include "TStyle.h" +#include "TCanvas.h" +#include "TBenchmark.h" + +#include "ClassTransfer.h" +#include "ClassAnasen.h" + +// expose to ROOT +int Run(int nEvents=1000, const char* outFile=nullptr){ + // Ensure TEve exists (create after geometry has been built if possible) + if(!gEve) TEveManager::Create(); + + // if a geometry has already been loaded by ANASEN_model.C, make sure it + // shows up in the TEve scene. TEveManager::Create() normally pulls in + // gGeoManager, but we do it explicitly to be safe. We must wrap the + // top node/volume in a TEveGeoTopNode (not pass a raw TGeoVolume). + if(gGeoManager){ + // create a TEve wrapper around the top node + TEveGeoTopNode *top = new TEveGeoTopNode(gGeoManager, gGeoManager->GetTopNode()); + gEve->AddElement(top); + } + + // Reaction + TransferReaction transfer; + + transfer.SetA(24,12, 0); + transfer.SetIncidentEnergyAngle(10, 0, 0); + transfer.Seta( 4, 2); + transfer.Setb( 1, 1); + + //TODO add alpha source + + std::vector ExAList = {0}; + std::vector ExList = {0, 1, 2}; + + double vertexXRange[2] = { -5, 5}; // mm + double vertexYRange[2] = { -5, 5}; + double vertexZRange[2] = { -100, 100}; + + double sigmaSX3_W = -1; // mm, < 0 use mid-point + double sigmaSX3_L = 3; // mm, < 0 use mid-point + double sigmaPW_A = 0; // from 0 to 1. + double sigmaPW_C = 0; // from 0 to 1. + + //################################################### + + printf("------------ Vertex :\n"); + printf("X : %7.2f - %7.2f mm\n", vertexXRange[0], vertexXRange[1]); + printf("Y : %7.2f - %7.2f mm\n", vertexYRange[0], vertexYRange[1]); + printf("Z : %7.2f - %7.2f mm\n", vertexZRange[0], vertexZRange[1]); + printf("------------ Uncertainty :\n"); + printf(" SX3 horizontal : %.1f\n", sigmaSX3_W); + printf(" SX3 vertical : %.1f\n", sigmaSX3_L); + printf(" Anode : %.1f mm\n", sigmaPW_A); + printf(" Cathode : %.1f mm\n", sigmaPW_C); + printf(" num_eve : %d \n",nEvents); + transfer.CalReactionConstant(); + + int nExA = ExAList.size(); + int nEx = ExList.size(); + + ANASEN * anasen = new ANASEN(); + SX3 * sx3 = anasen->GetSX3(); + PW * pw = anasen->GetPW(); + + TString saveFileName = "SimAnasen1.root"; + printf("\e[32m#################################### building Tree in %s\e[0m\n", saveFileName.Data()); + TFile * saveFile = new TFile(saveFileName, "recreate"); + TTree * tree = new TTree("tree", "tree"); + + double KEA; + tree->Branch("beamKEA", &KEA, "beamKEA/D"); + + double thetaCM, phiCM; + tree->Branch("thetaCM", &thetaCM, "thetaCM/D"); + tree->Branch("phiCM", &phiCM, "phiCM/D"); + + double thetab, phib, Tb; + double thetaB, phiB, TB; + tree->Branch("thetab", &thetab, "thetab/D"); + tree->Branch("phib", &phib, "phib/D"); + tree->Branch("Tb", &Tb, "Tb/D"); + tree->Branch("thetaB", &thetaB, "thetaB/D"); + tree->Branch("phiB", &phiB, "phiB/D"); + tree->Branch("TB", &TB, "TB/D"); + + int ExAID; + double ExA; + tree->Branch("ExAID", &ExAID, "ExAID/I"); + tree->Branch("ExA", &ExA, "ExA/D"); + + int ExID; + double Ex; + tree->Branch("ExID", &ExID, "ExID/I"); + tree->Branch("Ex", &Ex, "Ex/D"); + + double vertexX, vertexY, vertexZ; + tree->Branch("vX", &vertexX, "VertexX/D"); + tree->Branch("vY", &vertexY, "VertexY/D"); + tree->Branch("vZ", &vertexZ, "VertexZ/D"); + + double sx3X, sx3Y, sx3Z; + tree->Branch("sx3X", &sx3X, "sx3X/D"); + tree->Branch("sx3Y", &sx3Y, "sx3Y/D"); + tree->Branch("sx3Z", &sx3Z, "sx3Z/D"); + + int anodeID[2], cathodeID[2]; + tree->Branch("aID", anodeID, "anodeID/I"); + tree->Branch("cID", cathodeID, "cathodeID/I"); + + double anodeDist[2], cathodeDist[2]; + tree->Branch("aDist", anodeDist, "anodeDist/D"); + tree->Branch("cDist", cathodeDist, "cathodeDist/D"); + + int sx3ID, sx3Up, sx3Dn, sx3Bk; + double sx3ZFrac; + tree->Branch("sx3ID", &sx3ID, "sx3ID/I"); + tree->Branch("sx3Up", &sx3Up, "sx3Up/I"); + tree->Branch("sx3Dn", &sx3Dn, "sx3Dn/I"); + tree->Branch("sx3Bk", &sx3Bk, "sx3Bk/I"); + tree->Branch("sx3ZFrac", &sx3ZFrac, "sx3ZFrac/D"); + + double reTheta, rePhi; + tree->Branch("reTheta", &reTheta, "reconstucted_theta/D"); + tree->Branch("rePhi", &rePhi, "reconstucted_phi/D"); + + double reTheta1, rePhi1; + tree->Branch("reTheta1", &reTheta1, "reconstucted_theta1/D"); + tree->Branch("rePhi1", &rePhi1, "reconstucted_phi1/D"); + + double z0; + tree->Branch("z0", &z0, "reconstucted_Z/D"); + + + //========timer + TBenchmark clock; + bool shown ; + clock.Reset(); + clock.Start("timer"); + shown = false; + + // Create a point set to show hits + TEvePointSet *pts = new TEvePointSet("hits"); + pts->SetMarkerStyle(20); + pts->SetMarkerColor(kRed); + gEve->AddElement(pts); + + // Optionally open output file/tree + TFile *fout = nullptr; + TTree *tout = nullptr; + std::vector vx, vy, vz; + if(outFile){ + fout = TFile::Open(outFile,"RECREATE"); + tout = new TTree("evt","events"); + tout->Branch("x",&vx); + tout->Branch("y",&vy); + tout->Branch("z",&vz); + } + + // Simulation loop (replace with your sim code that fills vx,vy,vz per event) + + for( int i = 0; i < nEvents ; i++){ + + ExAID = gRandom->Integer(nExA); + ExA = ExAList[ExAID]; + transfer.SetExA(ExA); + + ExID = gRandom->Integer(nEx); + Ex = ExList[ExID]; + transfer.SetExB(Ex); + + transfer.CalReactionConstant(); + + thetaCM = TMath::ACos(2 * gRandom->Rndm() - 1) ; + phiCM = (gRandom->Rndm() - 0.5) * TMath::TwoPi(); + + //==== Calculate reaction + TLorentzVector * output = transfer.Event(thetaCM, phiCM); + TLorentzVector Pb = output[2]; + TLorentzVector PB = output[3]; + + thetab = Pb.Theta() * TMath::RadToDeg(); + thetaB = PB.Theta() * TMath::RadToDeg(); + + Tb = Pb.E() - Pb.M(); + TB = PB.E() - PB.M(); + + phib = Pb.Phi() * TMath::RadToDeg(); + phiB = PB.Phi() * TMath::RadToDeg(); + + vertexX = (vertexXRange[1]- vertexXRange[0])*gRandom->Rndm() + vertexXRange[0]; + vertexY = (vertexYRange[1]- vertexYRange[0])*gRandom->Rndm() + vertexYRange[0]; + vertexZ = (vertexZRange[1]- vertexZRange[0])*gRandom->Rndm() + vertexZRange[0]; + + TVector3 vertex(vertexX, vertexY, vertexZ); + + TVector3 dir(1, 0, 0); + dir.SetTheta(thetab * TMath::DegToRad()); + dir.SetPhi(phib * TMath::DegToRad()); + + + pw->FindWireID(vertex, dir, false); + sx3->FindSX3Pos(vertex, dir, false); + + PWHitInfo hitInfo = pw->GetHitInfo(); + + anodeID[0] = hitInfo.nearestWire.first; + cathodeID[0] = hitInfo.nearestWire.second; + anodeID[1] = hitInfo.nextNearestWire.first; + cathodeID[1] = hitInfo.nextNearestWire.second; + + anodeDist[0] = hitInfo.nearestDist.first; + cathodeDist[0] = hitInfo.nearestDist.second; + anodeDist[1] = hitInfo.nextNearestDist.first; + cathodeDist[1] = hitInfo.nextNearestDist.second; + + sx3ID = sx3->GetID(); + if( sx3ID >= 0 ){ + sx3Up = sx3->GetChUp(); + sx3Dn = sx3->GetChDn(); + sx3Bk = sx3->GetChBk(); + sx3ZFrac = sx3->GetZFrac(); + + //Introduce uncertaity + // TVector3 hitPos = sx3->GetHitPos(); + TVector3 hitPos = sx3->GetHitPosWithSigma(sigmaSX3_W, sigmaSX3_L); + + sx3X = hitPos.X(); + sx3Y = hitPos.Y(); + sx3Z = hitPos.Z(); + + pw->CalTrack(hitPos, anodeID[0], cathodeID[0], false); + reTheta = pw->GetTrackTheta() * TMath::RadToDeg(); + rePhi = pw->GetTrackPhi() * TMath::RadToDeg(); + + pw->CalTrack2(hitPos, hitInfo, sigmaPW_A, sigmaPW_C, false); + reTheta1 = pw->GetTrackTheta() * TMath::RadToDeg(); + rePhi1 = pw->GetTrackPhi() * TMath::RadToDeg(); + + z0 = pw->GetZ0(); + + }else{ + sx3Up = -1; + sx3Dn = -1; + sx3Bk = -1; + sx3ZFrac = TMath::QuietNaN(); + + sx3X = TMath::QuietNaN(); + sx3Y = TMath::QuietNaN(); + sx3Z = TMath::QuietNaN(); + + // for( int i = 0; i < 12; i++){ + // sx3Index[i] = -1; + // } + + reTheta = TMath::QuietNaN(); + rePhi = TMath::QuietNaN(); + + reTheta1 = TMath::QuietNaN(); + rePhi1 = TMath::QuietNaN(); + + z0 = TMath::QuietNaN(); + + } + // ----------------------------------------------------------------------- + + + } + + // update TEve + pts->Reset(); + for(size_t i=0;iSetNextPoint(vx[i], vy[i], vz[i]); + gEve->Redraw3D(); + gSystem->ProcessEvents(); + + // write to tree + if(tout){ tout->Fill(); fout->Flush(); } + + if(fout) fout->Close(); + return 0; +} + +// optional main to keep standalone build working +#ifndef __CLING__ +int main(int argc, char** argv){ + TApplication app("app",&argc,argv); + // if you want to import geometry here when running standalone: + // TGeoManager::Import("yourGeom.root"); + Run(500, "sim_out.root"); + return 0; +} +#endif diff --git a/Armory/run_script.C b/Armory/run_script.C new file mode 100644 index 0000000..e798df6 --- /dev/null +++ b/Armory/run_script.C @@ -0,0 +1,4 @@ +.L ANASEN_model.C +.L anasenMS_root.cpp+ +ANASEN_model(); +Run(10); diff --git a/Armory/test_run.C b/Armory/test_run.C new file mode 100644 index 0000000..120b12d --- /dev/null +++ b/Armory/test_run.C @@ -0,0 +1,7 @@ +.L ANASEN_model.C +.L anasenMS_root.cpp+ + +void test_run(){ + ANASEN_model(); + Run(10); +} diff --git a/Armory/vis_helpers.h b/Armory/vis_helpers.h new file mode 100644 index 0000000..b6c01c8 --- /dev/null +++ b/Armory/vis_helpers.h @@ -0,0 +1,34 @@ +// vis_helpers.h (or paste into anasenMS.cpp) +#include +#include +#include +#include +#include + +static TEvePointSet* gVisPts = nullptr; +static std::mutex gVisMutex; + +// Call from your ROOT session after creating TEve objects: +void SetVisPointSet(TEvePointSet* pts){ gVisPts = pts; } + +// Call this from your sim loop to update visualization and optionally write data: +void PushEventAndRecord(const std::vector& x, + const std::vector& y, + const std::vector& z, + TTree* outTree = nullptr) +{ + if(outTree){ + outTree->SetBranchAddress("x",(void*)&x); + outTree->SetBranchAddress("y",(void*)&y); + outTree->SetBranchAddress("z",(void*)&z); + outTree->Fill(); + outTree->GetCurrentFile()->Flush(); + } + + if(!gVisPts) return; + std::lock_guard lk(gVisMutex); + gVisPts->Reset(); + for(size_t i=0;iSetNextPoint(x[i], y[i], z[i]); + gEve->Redraw3D(); + gSystem->ProcessEvents(); +} diff --git a/Armory/vis_inproc b/Armory/vis_inproc new file mode 100755 index 0000000000000000000000000000000000000000..390267ebcefe7c5029892934ecd984e4b047257b GIT binary patch literal 29704 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 lcO05!TZ=rr%9<=0kZM;6; +#include +#include +#include +#include +#include +#include +#include +#include +#include + +void runSimulationAndUpdate(TEvePointSet* pts){ + TRandom3 rnd(0); + for(int ev=0; ev<10000; ++ev){ + pts->Reset(); + int n = 100; + for(int i=0;iSetNextPoint(x,y,z); + } + gEve->Redraw3D(); + gSystem->ProcessEvents(); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + } +} + +void StartVis(const char* geomfile=nullptr){ + int argc=0; char** argv=nullptr; + TApplication app("app",&argc,argv); + if(geomfile) TGeoManager::Import(geomfile); + TEveManager::Create(); + TEvePointSet *pts = new TEvePointSet("hits"); + gEve->AddElement(pts); + // runSimulationAndUpdate(pts); // or leave update API to caller + app.Run(); +} + +int main(int argc, char** argv){ + TApplication app("app",&argc,argv); + + if(argc>1) TGeoManager::Import(argv[1]); + + TEveManager::Create(); + + TEvePointSet *pts = new TEvePointSet("hits"); + pts->SetMarkerStyle(20); + pts->SetMarkerSize(1.2); + pts->SetMarkerColor(kRed); + gEve->AddElement(pts); + + // Option A: run simulation in same thread but yield to event loop inside the sim + runSimulationAndUpdate(pts); + + // Option B: run sim in a separate thread (only if sim avoids ROOT globals) + // std::thread simThread(runSimulationAndUpdate, pts); + // simThread.detach(); + + app.Run(); + return 0; +}