snapshot after 27Al experiment

This commit is contained in:
dirac 2024-04-15 13:29:57 -04:00
parent 88baa6a7dc
commit ccab43f18c
15 changed files with 1651 additions and 538 deletions

6
.gitignore vendored
View File

@ -3,6 +3,10 @@ EventBuilder*
*.so
*.pcm
*.root
*.exe
Mapper
AnasenMS
AnasenMS
data/
data_proton/

View File

@ -36,6 +36,18 @@
"cStandard": "c17",
"cppStandard": "gnu++17",
"intelliSenseMode": "linux-gcc-x64"
},
{
"name": "Dirac",
"includePath": [
"${workspaceFolder}/**",
"/usr/opt/root/**"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c17",
"cppStandard": "gnu++17",
"intelliSenseMode": "linux-gcc-x64"
}
],
"version": 4

View File

@ -86,6 +86,10 @@
"regex": "cpp",
"scoped_allocator": "cpp",
"shared_mutex": "cpp",
"valarray": "cpp"
"valarray": "cpp",
"processRun.C": "cpp",
"TrackRecon.C": "cpp",
"processRuns.C": "cpp",
"Analysis.C": "cpp"
}
}

20
Analysis.C Normal file
View File

@ -0,0 +1,20 @@
#include "TChain.h"
#include <iostream>
void Analysis(int start, int end) {
// Create a TChain
TChain *chain = new TChain("tree");
for(int i = start; i < end+1; i++) {
chain->Add(Form("data/root_data/Run_%03d_mapped.root", i));
}
// Process the chain using Analyzer.C+
chain->Process("Analyzer.C+");
}
// Define a macro with the same name as the script
void Analysis() {
Analysis(72, 194); // Adjust the range if needed
}

View File

@ -6,6 +6,14 @@
#include <TCanvas.h>
#include <TMath.h>
#include <utility>
#include <algorithm>
#include "Armory/ClassSX3.h"
#include "Armory/ClassPW.h"
#include "TVector3.h"
TH2F * hsx3IndexVE;
TH2F * hqqqIndexVE;
TH2F * hpcIndexVE;
@ -16,9 +24,18 @@ TH2F * hpcCoin;
TH2F * hqqqPolar;
TH2F * hsx3VpcIndex;
TH2F * hqqqVpcIndex;
TH2F * hqqqVpcE;
TH2F * hsx3VpcE;
TH2F * hanVScatsum;
int padID = 0;
SX3 sx3_contr;
PW pw_contr;
TVector3 hitPos;
bool HitNonZero;
TH1F * hZProj;
void Analyzer::Begin(TTree * /*tree*/){
TString option = GetOption();
@ -37,11 +54,37 @@ void Analyzer::Begin(TTree * /*tree*/){
hsx3VpcIndex = new TH2F("hsx3Vpcindex", "sx3 vs pc; sx3 index; pc index", 24*12, 0, 24*12, 48, 0, 48);
hsx3VpcIndex->SetNdivisions( -612, "x");
hsx3VpcIndex->SetNdivisions( -12, "y");
hqqqVpcIndex = new TH2F("hqqqVpcindex", "qqq vs pc; qqq index; pc index", 4*2*16, 0, 4*2*16, 48, 0, 48);
hqqqVpcIndex->SetNdivisions( -612, "x");
hqqqVpcIndex->SetNdivisions( -12, "y");
hqqqVpcE = new TH2F("hqqqVpcEnergy", "qqq vs pc; qqq energy; pc energy", 400, 0, 5000, 400, 0, 5000);
hqqqVpcE->SetNdivisions( -612, "x");
hqqqVpcE->SetNdivisions( -12, "y");
hsx3VpcE = new TH2F("hsx3VpcEnergy", "sx3 vs pc; sx3 energy; pc energy", 400, 0, 5000, 400, 0, 5000);
hsx3VpcE->SetNdivisions( -612, "x");
hsx3VpcE->SetNdivisions( -12, "y");
hZProj = new TH1F("hZProj", "Z Projection", 200, -600, 600);
hanVScatsum = new TH2F("hanVScatsum", "Anode vs Cathode Sum; Anode E; Cathode E", 400,0 , 10000, 400, 0 , 16000);
sx3_contr.ConstructGeo();
pw_contr.ConstructGeo();
}
Bool_t Analyzer::Process(Long64_t entry){
// if ( entry > 100 ) return kTRUE;
hitPos.Clear();
HitNonZero = false;
// if( entry > 1) return kTRUE;
// printf("################### ev : %llu \n", entry);
@ -69,7 +112,10 @@ Bool_t Analyzer::Process(Long64_t entry){
//########################################################### Raw data
// //======================= SX3
std::vector<std::pair<int, int>> ID; // first = id, 2nd = index
for( int i = 0; i < sx3.multi; i ++){
ID.push_back(std::pair<int, int>(sx3.id[i], i));
hsx3IndexVE->Fill( sx3.index[i], sx3.e[i] );
@ -79,49 +125,208 @@ Bool_t Analyzer::Process(Long64_t entry){
for( int j = 0; j < pc.multi; j++){
hsx3VpcIndex->Fill( sx3.index[i], pc.index[j] );
// if( sx3.ch[index] > 8 ){
// hsx3VpcE->Fill( sx3.e[i], pc.e[j] );
// }
}
}
if( ID.size() > 0 ){
std::sort(ID.begin(), ID.end(), [](const std::pair<int, int> & a, const std::pair<int, int> & b) {
return a.first < b.first;
} );
// printf("##############################\n");
// for( size_t i = 0; i < ID.size(); i++) printf("%zu | %d %d \n", i, ID[i].first, ID[i].second );
std::vector<std::pair<int, int>> sx3ID;
sx3ID.push_back(ID[0]);
bool found = false;
for( size_t i = 1; i < ID.size(); i++){
if( ID[i].first == sx3ID.back().first) {
sx3ID.push_back(ID[i]);
if( sx3ID.size() >= 3) {
found = true;
}
}else{
if( !found ){
sx3ID.clear();
sx3ID.push_back(ID[i]);
}
}
}
// printf("---------- sx3ID Multi : %zu \n", sx3ID.size());
if( found ){
int sx3ChUp, sx3ChDn, sx3ChBk;
float sx3EUp, sx3EDn;
// printf("------ sx3 ID : %d, multi: %zu\n", sx3ID[0].first, sx3ID.size());
for( size_t i = 0; i < sx3ID.size(); i++ ){
int index = sx3ID[i].second;
// printf(" %zu | index %d | ch : %d, energy : %d \n", i, index, sx3.ch[index], sx3.e[index]);
if( sx3.ch[index] < 8 ){
if( sx3.ch[index] % 2 == 0) {
sx3ChDn = sx3.ch[index];
sx3EDn = sx3.e[index];
}else{
sx3ChUp = sx3.ch[index];
sx3EUp = sx3.e[index];
}
}else{
sx3ChBk = sx3.ch[index];
}
for( int j = 0; j < pc.multi; j++){
// hsx3VpcIndex->Fill( sx3.index[i], pc.index[j] );
if( sx3.ch[index] > 8 ){
hsx3VpcE->Fill( sx3.e[i], pc.e[j] );
// hpcIndexVE->Fill( pc.index[i], pc.e[i] );
}
}
}
sx3_contr.CalSX3Pos(sx3ID[0].first, sx3ChUp, sx3ChDn, sx3ChBk, sx3EUp, sx3EDn);
hitPos = sx3_contr.GetHitPos();
HitNonZero = true;
// hitPos.Print();
}
}
// //======================= QQQ
for( int i = 0; i < qqq.multi; i ++){
hqqqIndexVE->Fill( qqq.index[i], qqq.e[i] );
// for( int j = 0; j < pc.multi; j++){
// if(pc.index[j]==4){
hqqqIndexVE->Fill( qqq.index[i], qqq.e[i] );
// }
// }
for( int j = 0; j < qqq.multi; j++){
if ( j == i ) continue;
hqqqCoin->Fill( qqq.index[i], qqq.index[j]);
}
for( int j = i + 1; j < qqq.multi; j++){
hqqqCoin->Fill( qqq.index[i], qqq.index[j]);
for( int k = 0; k < pc.multi; k++){
if(pc.index[k]<24 && pc.e[k]>50 ){
hqqqVpcE->Fill( qqq.e[i], pc.e[k] );
// hpcIndexVE->Fill( pc.index[i], pc.e[i] );
hqqqVpcIndex->Fill( qqq.index[i], pc.index[j] );
if( qqq.used[i] == true ) continue;
}
// }
}
// if( qqq.used[i] == true ) continue;
if( qqq.id[i] == qqq.id[j] && (16 - qqq.ch[i]) * (16 - qqq.ch[j]) < 0 ){ // must be same detector and wedge and ring
//if( qqq.id[i] == qqq.id[j] && (16 - qqq.ch[i]) * (16 - qqq.ch[j]) < 0 ){ // must be same detector and wedge and ring
if( qqq.id[i] == qqq.id[j] ){ // must be same detector
int chWedge = qqq.ch[i];
int chRing = qqq.ch[j] - 16;
if( qqq.ch[i] >= 16 ) {
chWedge = qqq.ch[j];
chRing = qqq.ch[i] - 16;
int chWedge = -1;
int chRing = -1;
if( qqq.ch[i] < qqq.ch[j]){
chRing = qqq.ch[j] - 16;
chWedge = qqq.ch[i];
}else{
chRing = qqq.ch[i];
chWedge = qqq.ch[j] - 16;
}
//printf(" ID : %d , chWedge : %d, chRing : %d \n", qqq.id[i], chWedge, chRing);
// printf(" ID : %d , chWedge : %d, chRing : %d \n", qqq.id[i], chWedge, chRing);
double theta = -TMath::Pi() + 2*TMath::Pi()/16/4.*(qqq.id[i]*16 + chWedge +0.5);
double theta = -TMath::Pi()/2 + 2*TMath::Pi()/16/4.*(qqq.id[i]*16 + chWedge +0.5);
double rho = 10.+40./16.*(chRing+0.5);
// if(qqq.e[i]>50){
hqqqPolar->Fill( theta, rho);
// }
// qqq.used[i] = true;
// qqq.used[j] = true;
qqq.used[i] = true;
qqq.used[j] = true;
if( !HitNonZero ){
double x = rho * TMath::Cos(theta);
double y = rho * TMath::Sin(theta);
hitPos.SetXYZ(x, y, 23 + 75 + 30);
HitNonZero = true;
}
}
}
}
// //======================= PC
ID.clear();
int counter=0;
std::vector<std::pair<int, double>> E;
E.clear();
for( int i = 0; i < pc.multi; i ++){
if( pc.e[i] > 100 ) ID.push_back(std::pair<int, int>(pc.id[i], i));
if( pc.e[i] > 100 ) E.push_back(std::pair<int, double>(pc.index[i], pc.e[i]));
hpcIndexVE->Fill( pc.index[i], pc.e[i] );
for( int j = i+1; j < pc.multi; j++){
hpcCoin->Fill( pc.index[i], pc.index[j]);
}
}
// for( size_t i = 0; i < E.size(); i++) printf("%zu | %d %d \n", i, E[i].first, E[i].second );
if( E.size()>=3 ){
int aID = 0;
int cID = 0;
float aE = 0;
float cE = 0;
bool multi_an =false;
// if( ID[0].first < 1 ) {
// aID = pc.ch[ID[0].second];
// cID = pc.ch[ID[1].second];
// }else{
// cID = pc.ch[ID[0].second];
// aID = pc.ch[ID[1].second];
// }
// printf("anode= %d, cathode = %d\n", aID, cID);
// for( int k = 0; k < qqq.multi; k++){
// if(qqq.index[k]==75 && pc.index[k]==2 && pc.e[k]>100){
for(int l=0;l<E.size();l++){
if(E[l].first<24 && E[l].first!=20 && E[l].first!=12){
if(!multi_an){
aE = E[l].second;
}
multi_an=true;
}
else {
cE = E[l].second + cE;
}
}
// }
// }
hanVScatsum->Fill(aE,cE);
if( ID[0].first < 1 ) {
aID = pc.ch[ID[0].second];
cID = pc.ch[ID[1].second];
}else{
cID = pc.ch[ID[0].second];
aID = pc.ch[ID[1].second];
}
if( HitNonZero){
pw_contr.CalTrack( hitPos, aID, cID);
hZProj->Fill(pw_contr.GetZ0());
}
}
//########################################################### Track constrcution
@ -135,7 +340,7 @@ Bool_t Analyzer::Process(Long64_t entry){
void Analyzer::Terminate(){
gStyle->SetOptStat("neiou");
TCanvas * canvas = new TCanvas("cANASEN", "ANASEN", 1000, 1000);
TCanvas * canvas = new TCanvas("cANASEN", "ANASEN", 2000, 2000);
canvas->Divide(3,3);
//hsx3VpcIndex->Draw("colz");
@ -163,6 +368,8 @@ void Analyzer::Terminate(){
//=============================================== pad-5
padID ++; canvas->cd(padID); canvas->cd(padID)->SetGrid(1);
canvas->cd(padID)->SetLogz(true);
hqqqCoin->Draw("colz");
//=============================================== pad-6
@ -173,7 +380,23 @@ void Analyzer::Terminate(){
//=============================================== pad-7
padID ++; canvas->cd(padID); canvas->cd(padID)->SetGrid(1);
hsx3VpcIndex ->Draw("colz");
// hsx3VpcIndex ->Draw("colz");
hsx3VpcE->Draw("colz") ;
//=============================================== pad-8
padID ++; canvas->cd(padID); canvas->cd(padID)->SetGrid(1);
// hqqqVpcIndex ->Draw("colz");
hqqqVpcE ->Draw("colz");
//=============================================== pad-9
padID ++;
// canvas->cd(padID)->DrawFrame(-50, -50, 50, 50);
// hqqqPolar->Draw("same colz pol");
canvas->cd(padID); canvas->cd(padID)->SetGrid(1);
// hZProj->Draw();
hanVScatsum->Draw("colz");
}

246
Armory/ClassPC1An.h Normal file
View File

@ -0,0 +1,246 @@
#ifndef ClassPC_h
#define ClassPC_h
#include <cstdio>
#include <TMath.h>
#include <TVector3.h>
#include <TRandom.h>
struct PCHit_1An{
std::pair<short, short> nearestWire; // anode, cathode
std::pair<double, double> nearestDist; // anode, cathode
short nextNearestWire; // cathode
double nextNearestDist; // cathode
void Clear(){
nearestWire.first = -1;
nearestWire.second = -1;
nearestDist.first = 999999999;
nearestDist.second = 999999999;
nextNearestWire= -1;
nextNearestDist = 999999999;
}
};
//!########################################################
class PC{ // proportional wire
public:
PC(){ ClearHitInfo();};
~PC(){};
PCHit_1An GetHitInfo() const {return hitInfo;}
std::pair<short, short> GetNearestID() const {return hitInfo.nearestWire;}
std::pair<double, double> GetNearestDistance() const {return hitInfo.nearestDist;}
short Get2ndNearestID() const {return hitInfo.nextNearestWire;}
double Get2ndNearestDistance() const {return hitInfo.nextNearestDist;}
TVector3 GetTrackPos() const {return trackPos;}
TVector3 GetTrackVec() const {return trackVec;}
double GetTrackTheta() const {return trackVec.Theta();}
double GetTrackPhi() const {return trackVec.Phi();}
double GetZ0();
int GetNumWire() const {return nWire;}
double GetDeltaAngle() const {return dAngle;}
double GetAnodeLength() const {return anodeLength;}
double GetCathodeLength() const {return cathodeLength;}
TVector3 GetAnodeDn(short id) const {return An[id].first;}
TVector3 GetAnodeUp(short id) const {return An[id].second;}
TVector3 GetCathodeDn(short id) const {return Ca[id].first;}
TVector3 GetCathodeUp(short id) const {return Ca[id].second;}
TVector3 GetAnodneMid(short id) const {return (An[id].first + An[id].second) * 0.5; }
double GetAnodeTheta(short id) const {return (An[id].first - An[id].second).Theta();}
double GetAnodePhi(short id) const {return (An[id].first - An[id].second).Phi();}
TVector3 GetCathodneMid(short id) const {return (Ca[id].first + Ca[id].second) * 0.5; }
double GetCathodeTheta(short id) const {return (Ca[id].first - Ca[id].second).Theta();}
double GetCathodePhi(short id) const {return (Ca[id].first - Ca[id].second).Phi();}
void ClearHitInfo();
void ConstructGeo();
void FindWireID(TVector3 pos, TVector3 direction, bool verbose = false);
void CalTrack3(TVector3 sx3Pos, PCHit_1An hitInfo, double sigmaA = 0, double sigmaC = 0, bool verbose = false);
void Print(){
printf(" The nearest | Anode: %2d(%5.2f) Cathode: %2d(%5.2f)\n", hitInfo.nearestWire.first,
hitInfo.nearestDist.first,
hitInfo.nearestWire.second,
hitInfo.nearestDist.second);
printf(" The 2nd nearest Cathode: %2d(%5.2f)\n", hitInfo.nextNearestWire,
hitInfo.nextNearestDist);
}
private:
// PCHitInfo hitInfo;
PCHit_1An hitInfo;
TVector3 trackPos;
TVector3 trackVec;
const int nWire = 24;
const int wireShift = 3;
const float zLen = 380; //mm
const float radiusA = 37;
const float radiusC = 43;
double dAngle;
double anodeLength;
double cathodeLength;
std::vector<std::pair<TVector3,TVector3>> An; // the anode wire position vector in space
std::vector<std::pair<TVector3,TVector3>> Ca; // the cathode wire position vector in space
double Distance(TVector3 a1, TVector3 a2, TVector3 b1, TVector3 b2){
TVector3 na = a1 - a2;
TVector3 nb = b1 - b2;
TVector3 nd = (na.Cross(nb)).Unit();
return TMath::Abs(nd.Dot(a1-b2));
}
};
inline void PC::ClearHitInfo(){
hitInfo.Clear();
}
inline void PC::ConstructGeo(){
An.clear();
Ca.clear();
std::pair<TVector3, TVector3> p1; // anode
std::pair<TVector3, TVector3> q1; // cathode
//anode and cathode start at pos-Y axis and count in right-Hand
//anode wire shift is right-hand.
//cathode wire shift is left-hand.
for(int i = 0; i < nWire; i++ ){
// Anode rotate right-hand
p1.first.SetXYZ( radiusA * TMath::Cos( TMath::TwoPi() / nWire * (i) + TMath::PiOver2()),
radiusA * TMath::Sin( TMath::TwoPi() / nWire * (i) + TMath::PiOver2()),
zLen/2);
p1.second.SetXYZ( radiusA * TMath::Cos( TMath::TwoPi() / nWire * (i + wireShift) + TMath::PiOver2()),
radiusA * TMath::Sin( TMath::TwoPi() / nWire * (i + wireShift) + TMath::PiOver2()),
-zLen/2);
An.push_back(p1);
// Cathod rotate left-hand
q1.first.SetXYZ( radiusC * TMath::Cos( TMath::TwoPi() / nWire * (i) + TMath::PiOver2()),
radiusC * TMath::Sin( TMath::TwoPi() / nWire * (i) + TMath::PiOver2()),
zLen/2);
q1.second.SetXYZ( radiusC * TMath::Cos( TMath::TwoPi() / nWire * (i - wireShift) + TMath::PiOver2()),
radiusC * TMath::Sin( TMath::TwoPi() / nWire * (i - wireShift) + TMath::PiOver2()),
-zLen/2);
Ca.push_back(q1);
}
dAngle = wireShift * TMath::TwoPi() / nWire;
anodeLength = TMath::Sqrt( zLen*zLen + TMath::Power(2* radiusA * TMath::Sin(dAngle/2),2) );
cathodeLength = TMath::Sqrt( zLen*zLen + TMath::Power(2* radiusC * TMath::Sin(dAngle/2),2) );
}
inline void PC::FindWireID(TVector3 pos, TVector3 direction, bool verbose ){
hitInfo.Clear();
double phi = direction.Phi();
for( int i = 0; i < nWire; i++){
double disA = 99999999;
double phiS = An[i].first.Phi() - TMath::PiOver4();
double phiL = An[i].second.Phi() + TMath::PiOver4();
// printf("A%2d: %f %f | %f\n", i, phiS * TMath::RadToDeg(), phiL * TMath::RadToDeg(), phi * TMath::RadToDeg());
if( phi > 0 && phiS > phiL ) phiL = phiL + TMath::TwoPi();
if( phi < 0 && phiS > phiL ) phiS = phiS - TMath::TwoPi();
if( phiS < phi && phi < phiL) {
disA = Distance( pos, pos + direction, An[i].first, An[i].second);
if( disA < hitInfo.nearestDist.first ){
hitInfo.nearestDist.first = disA;
hitInfo.nearestWire.first = i;
}
}
double disC = 99999999;
phiS = Ca[i].second.Phi()- TMath::PiOver4();
phiL = Ca[i].first.Phi() + TMath::PiOver4();
// printf("C%2d: %f %f\n", i, phiS * TMath::RadToDeg(), phiL * TMath::RadToDeg());
if( phi > 0 && phiS > phiL ) phiL = phiL + TMath::TwoPi();
if( phi < 0 && phiS > phiL ) phiS = phiS - TMath::TwoPi();
if(phiS < phi && phi < phiL) {
disC = Distance( pos, pos + direction, Ca[i].first, Ca[i].second);
if( disC < hitInfo.nearestDist.second ){
hitInfo.nearestDist.second = disC;
hitInfo.nearestWire.second = i;
}
}
if(verbose) printf(" %2d | %8.2f, %8.2f\n", i, disA, disC);
}
short cathode1 = hitInfo.nearestWire.second;
short ccc1 = cathode1 - 1; if( ccc1 < 0 ) ccc1 += nWire;
short ccc2 = (cathode1 + 1) % nWire;
double haha1 = Distance( pos, pos + direction, Ca[ccc1].first, Ca[ccc1].second);
double haha2 = Distance( pos, pos + direction, Ca[ccc2].first, Ca[ccc2].second);
if( haha1 < haha2){
hitInfo.nextNearestWire = ccc1;
hitInfo.nextNearestDist = haha1;
}else{
hitInfo.nextNearestWire = ccc2;
hitInfo.nextNearestDist= haha2;
}
if( verbose ) Print();
}
inline void PC::CalTrack3(TVector3 sx3Pos, PCHit_1An hitInfo, double sigmaA, double sigmaC, bool verbose){
trackPos = sx3Pos;
double p1 = TMath::Abs(hitInfo.nearestDist.first + gRandom->Gaus(0, sigmaA));
short anodeID1 = hitInfo.nearestWire.first;
double q1 = TMath::Abs(hitInfo.nearestDist.second + gRandom->Gaus(0, sigmaC));
double q2 = TMath::Abs(hitInfo.nextNearestDist+ gRandom->Gaus(0, sigmaC));
double fracC = q1 / (q1 + q2);
short cathodeID1 = hitInfo.nearestWire.second;
short cathodeID2 = hitInfo.nextNearestWire;
TVector3 shiftC1 = (Ca[cathodeID2].first - Ca[cathodeID1].first) * fracC;
TVector3 shiftC2 = (Ca[cathodeID2].second - Ca[cathodeID1].second) * fracC;
TVector3 a1 = An[anodeID1].first;
TVector3 c1 = Ca[cathodeID1].first + shiftC1;
TVector3 c2 = Ca[cathodeID1].second + shiftC2;
TVector3 n1 = (sx3Pos - a1).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("Theta, Phi = %f, %f \n", trackVec.Theta() *TMath::RadToDeg(), trackVec.Phi()*TMath::RadToDeg());
}
inline double PC::GetZ0(){
double x = trackPos.X();
double y = trackPos.Y();
double rho = TMath::Sqrt(x*x + y*y);
double theta = trackVec.Theta();
return trackPos.Z() - rho / TMath::Tan(theta);
}
#endif

View File

@ -4,6 +4,7 @@
#include <cstdio>
#include <TMath.h>
#include <TVector3.h>
#include <TRandom.h>
class SX3{
public:
@ -94,7 +95,7 @@ private:
if( verbose ) printf(" ----h, k : %f, %f\n", h, k);
return std::pair(h,k);
return std::pair<double,double>(h,k);
}
};
@ -125,7 +126,7 @@ inline void SX3::ConstructGeo(){
sa.RotateZ( rot );
sb.RotateZ( rot );
SDn.push_back(std::pair(sa,sb));
SDn.push_back(std::pair<TVector3,TVector3>(sa,sb));
sc.SetXYZ( radius, -width/2, gap/2 );
sc.RotateZ( rot );
@ -138,7 +139,7 @@ inline void SX3::ConstructGeo(){
sa.RotateZ( rot );
sb.RotateZ( rot );
SUp.push_back(std::pair(sa,sb));
SUp.push_back(std::pair<TVector3,TVector3>(sa,sb));
}
}
@ -225,6 +226,7 @@ inline void SX3::CalSX3Pos(unsigned short ID, unsigned short chUp, unsigned shor
hitPos.Clear();
if( (chUp - chDown) != 1 || (chDown % 2) != 0) return ;
int reducedID = ID % numDet;

View File

@ -7,7 +7,7 @@
#include <TMath.h>
#include <TBenchmark.h>
#include "../mapping_alpha.h"
#include "../mapping.h"
#include "ClassDet.h"
//===============================
@ -91,6 +91,7 @@ int main(int argc, char **argv){
newTree->Branch("qqqCh", &qqq.ch, "qqqCh[qqqMulti]/s");
newTree->Branch("qqqE", &qqq.e, "qqqEnergy[qqqMulti]/s");
newTree->Branch("qqqT", &qqq.t, "qqqTime[qqqMulti]/l");
newTree->Branch("qqqSN", &qqq.sn, "qqqSN[qqqMulti]/s");
newTree->Branch("pcMulti", &pc.multi, "pcMulti/s");
newTree->Branch("pcID", &pc.id, "pcID[pcMulti]/s");
@ -116,7 +117,7 @@ int main(int argc, char **argv){
for( unsigned int i = 0; i < multi; i++){
//printf("%10u/%10u| %5d, %2u, %6u, %14llu\n", i, multi, sn[i], ch[i], e[i], e_t[i] );
// printf("%10u/%10u| %5d, %2u, %6u, %14llu\n", i, multi, sn[i], ch[i], e[i], e_t[i] );
//globalCh = digi-ID * nCh(digi-iD) + ch
int globalCh = -1;
@ -147,6 +148,7 @@ int main(int argc, char **argv){
qqq.ch[qqq.multi] = (ID - 10000) % 100;
qqq.e[qqq.multi] = e[i];
qqq.t[qqq.multi] = e_t[i];
qqq.sn[qqq.multi] = sn[i];
qqq.multi ++;
}

View File

@ -9,15 +9,19 @@ fi
runID=$1
timeWindow=$2
rawFolder=/media/nvmeData/ANASEN_test/analysis/data
rootFolder=/media/nvmeData/ANASEN_test/root_data
rawFolder=/home/tandem/Desktop/analysis/data
rootFolder=/home/tandem/Desktop/analysis/data/root_data
fileList=`\ls -1 ${rawFolder}/*${runID}*.fsu`
rsync -a splitpole@128.186.111.223:/media/nvmeData/ANASEN27Alap/*.fsu /home/tandem/Desktop/analysis/data
./EventBuilder ${timeWindow} 0 0 500000 ${fileList}
fileList=`\ls -1 ${rawFolder}/Run_${runID}_*.fsu`
./EventBuilder ${timeWindow} 0 0 10000000 ${fileList}
outFile=${rawFolder}/*${runID}*${timeWindow}.root
mv -vf ${outFile} ${rootFolder}/.
./Mapper ${rootFolder}/*${runID}*${timeWindow}.root
root "processRun.C(\"${rootFolder}/Run_${runID}_mapped.root\")"

303
TrackRecon.C Normal file
View File

@ -0,0 +1,303 @@
#define Analyzer_cxx
#include "Analyzer.h"
#include <TH2.h>
#include <TStyle.h>
#include <TCanvas.h>
#include <TMath.h>
#include <utility>
#include <algorithm>
#include "Armory/ClassSX3.h"
#include "Armory/ClassPC1An.h"
#include "TVector3.h"
TH2F * hsx3IndexVE;
TH2F * hqqqIndexVE;
TH2F * hpcIndexVE;
TH2F * hsx3Coin;
TH2F * hqqqCoin;
TH2F * hpcCoin;
TH2F * hqqqPolar;
TH2F * hsx3VpcIndex;
TH2F * hqqqVpcIndex;
TH2F * hqqqVpcE;
TH2F * hsx3VpcE;
TH2F * hanVScatsum;
int padID = 0;
SX3 sx3_contr;
PC pw_contr;
TVector3 hitPos;
bool HitNonZero;
TH1F * hZProj;
void Analyzer::Begin(TTree * /*tree*/){
TString option = GetOption();
hZProj = new TH1F("hZProj", "Z Projection", 200, -600, 600);
sx3_contr.ConstructGeo();
pw_contr.ConstructGeo();
}
Bool_t Analyzer::Process(Long64_t entry){
// if ( entry > 100 ) return kTRUE;
hitPos.Clear();
HitNonZero = false;
// if( entry > 1) return kTRUE;
// printf("################### ev : %llu \n", entry);
b_sx3Multi->GetEntry(entry);
b_sx3ID->GetEntry(entry);
b_sx3Ch->GetEntry(entry);
b_sx3E->GetEntry(entry);
b_sx3T->GetEntry(entry);
b_qqqMulti->GetEntry(entry);
b_qqqID->GetEntry(entry);
b_qqqCh->GetEntry(entry);
b_qqqE->GetEntry(entry);
b_qqqT->GetEntry(entry);
b_pcMulti->GetEntry(entry);
b_pcID->GetEntry(entry);
b_pcCh->GetEntry(entry);
b_pcE->GetEntry(entry);
b_pcT->GetEntry(entry);
sx3.CalIndex();
qqq.CalIndex();
pc.CalIndex();
// sx3.Print();
//########################################################### Raw data
// //======================= SX3
std::vector<std::pair<int, int>> ID; // first = id, 2nd = index
if( ID.size() > 0 ){
std::sort(ID.begin(), ID.end(), [](const std::pair<int, int> & a, const std::pair<int, int> & b) {
return a.first < b.first;
} );
// printf("##############################\n");
// for( size_t i = 0; i < ID.size(); i++) printf("%zu | %d %d \n", i, ID[i].first, ID[i].second );
std::vector<std::pair<int, int>> sx3ID;
sx3ID.push_back(ID[0]);
bool found = false;
for( size_t i = 1; i < ID.size(); i++){
if( ID[i].first == sx3ID.back().first) {
sx3ID.push_back(ID[i]);
if( sx3ID.size() >= 3) {
found = true;
}
}else{
if( !found ){
sx3ID.clear();
sx3ID.push_back(ID[i]);
}
}
}
// printf("---------- sx3ID Multi : %zu \n", sx3ID.size());
if( found ){
int sx3ChUp, sx3ChDn, sx3ChBk;
float sx3EUp, sx3EDn;
// printf("------ sx3 ID : %d, multi: %zu\n", sx3ID[0].first, sx3ID.size());
for( size_t i = 0; i < sx3ID.size(); i++ ){
int index = sx3ID[i].second;
// printf(" %zu | index %d | ch : %d, energy : %d \n", i, index, sx3.ch[index], sx3.e[index]);
if( sx3.ch[index] < 8 ){
if( sx3.ch[index] % 2 == 0) {
sx3ChDn = sx3.ch[index];
sx3EDn = sx3.e[index];
}else{
sx3ChUp = sx3.ch[index];
sx3EUp = sx3.e[index];
}
}else{
sx3ChBk = sx3.ch[index];
}
for( int j = 0; j < pc.multi; j++){
// hsx3VpcIndex->Fill( sx3.index[i], pc.index[j] );
if( sx3.ch[index] > 8 ){
hsx3VpcE->Fill( sx3.e[i], pc.e[j] );
// hpcIndexVE->Fill( pc.index[i], pc.e[i] );
}
}
}
sx3_contr.CalSX3Pos(sx3ID[0].first, sx3ChUp, sx3ChDn, sx3ChBk, sx3EUp, sx3EDn);
hitPos = sx3_contr.GetHitPos();
HitNonZero = true;
// hitPos.Print();
}
}
// //======================= QQQ
for( int i = 0; i < qqq.multi; i ++){
for( int j = i + 1; j < qqq.multi; j++){
if( qqq.id[i] == qqq.id[j] ){ // must be same detector
int chWedge = -1;
int chRing = -1;
if( qqq.ch[i] < qqq.ch[j]){
chRing = qqq.ch[j] - 16;
chWedge = qqq.ch[i];
}else{
chRing = qqq.ch[i];
chWedge = qqq.ch[j] - 16;
}
// printf(" ID : %d , chWedge : %d, chRing : %d \n", qqq.id[i], chWedge, chRing);
double theta = -TMath::Pi()/2 + 2*TMath::Pi()/16/4.*(qqq.id[i]*16 + chWedge +0.5);
double rho = 10.+40./16.*(chRing+0.5);
// if(qqq.e[i]>50){
hqqqPolar->Fill( theta, rho);
// }
// qqq.used[i] = true;
// qqq.used[j] = true;
if( !HitNonZero ){
double x = rho * TMath::Cos(theta);
double y = rho * TMath::Sin(theta);
hitPos.SetXYZ(x, y, 23 + 75 + 30);
HitNonZero = true;
}
}
}
}
// //======================= PC
PCHit_1An hitInfo;
ID.clear();
int counter=0;
std::vector<std::pair<int, double>> E;
E.clear();
if( E.size()==3 ){
float aE = 0;
float cE = 0;
bool multi_an =false;
for(int l=0;l<E.size();l++){
if(E[l].first<24 && E[l].first!=20 && E[l].first!=12){
if(!multi_an){
aE = E[l].second;
}
multi_an=true;
}
else {
cE = E[l].second + cE;
}
}
// printf("anode= %d, cathode = %d\n", aID, cID);
// }
if( ID[0].first < 1 ) {
aID = pc.ch[ID[0].second];
cID = pc.ch[ID[1].second];
}else{
cID = pc.ch[ID[0].second];
aID = pc.ch[ID[1].second];
}
hanVScatsum->Fill(aE,cE);
if( HitNonZero){
pw_contr.CalTrack3( hitPos, hitinfo, cID);
hZProj->Fill(pw_contr.GetZ0());
}
// }
}
//########################################################### Track constrcution
//############################## DO THE KINEMATICS
return kTRUE;
}
void Analyzer::Terminate(){
gStyle->SetOptStat("neiou");
TCanvas * canvas = new TCanvas("cANASEN", "ANASEN", 2000, 2000);
canvas->Divide(3,3);
//hsx3VpcIndex->Draw("colz");
//=============================================== pad-1
padID ++; canvas->cd(padID); canvas->cd(padID)->SetGrid(1);
hsx3IndexVE->Draw("colz");
//=============================================== pad-2
padID ++; canvas->cd(padID); canvas->cd(padID)->SetGrid(1);
hqqqIndexVE->Draw("colz");
//=============================================== pad-3
padID ++; canvas->cd(padID); canvas->cd(padID)->SetGrid(1);
hpcIndexVE->Draw("colz");
//=============================================== pad-4
padID ++; canvas->cd(padID); canvas->cd(padID)->SetGrid(1);
hsx3Coin->Draw("colz");
//=============================================== pad-5
padID ++; canvas->cd(padID); canvas->cd(padID)->SetGrid(1);
hqqqCoin->Draw("colz");
//=============================================== pad-6
padID ++; canvas->cd(padID); canvas->cd(padID)->SetGrid(1);
hpcCoin->Draw("colz");
//=============================================== pad-7
padID ++; canvas->cd(padID); canvas->cd(padID)->SetGrid(1);
hsx3VpcIndex ->Draw("colz");
// hsx3VpcE->Draw("colz") ;
//=============================================== pad-8
padID ++; canvas->cd(padID); canvas->cd(padID)->SetGrid(1);
hqqqVpcIndex ->Draw("colz");
// hqqqVpcE ->Draw("colz");
//=============================================== pad-9
padID ++;
// canvas->cd(padID)->DrawFrame(-50, -50, 50, 50);
// hqqqPolar->Draw("same colz pol");
canvas->cd(padID); canvas->cd(padID)->SetGrid(1);
hZProj->Draw();
// hanVScatsum->Draw("colz");
}

View File

@ -20,8 +20,9 @@ const std::map<int, unsigned short> board = {
{5, 15529},
{6, 15528},
{7, 334},
{8, 409},
{9, 405}
{8, 379},
{9, 325},
{10, 405}
};
const int nBd = board.size();
@ -39,6 +40,7 @@ const int nV1725 = 3;
// use the GenMapping() to get that
const std::vector<int> mapping = {
//================== 17122
806, 807, 804, 805, 803, 802, 801, 800, 1006, 1007, 1004, 1005, 1003, 1002, 1001, 1000,
606, 607, 604, 605, 603, 602, 601, 600, 1106, 1107, 1104, 1105, 1103, 1102, 1101, 1100,
@ -46,40 +48,42 @@ const std::vector<int> mapping = {
706, 707, 704, 705, 703, 702, 701, 700, 906, 907, 904, 905, 903, 902, 901, 900,
//================== 17123
1406, 1407, 1404, 1405, 1403, 1402, 1401, 1400, 1606, 1607, 1604, 1605, 1603, 1602, 1601, 1600,
1306, 1307, 1304, 1305, 1303, 1302, 1301, 1300, 1706, 1707, 1704, 1705, 1703, 1702, 1701, 1700,
1306, 1307, 1304, 1305, 1303, 1302, 1301, 1300, 1506, 1507, 1504, 1505, 1503, 1502, 1501, 1500,
1311, 1310, 1309, 1308, 1711, 1710, 1709, 1708, 1611, 1610, 1609, 1608, 1411, 1410, 1409, 1408,
1206, 1207, 1204, 1205, 1203, 1202, 1201, 1200, 1506, 1507, 1504, 1505, 1503, 1502, 1501, 1500,
1206, 1207, 1204, 1205, 1203, 1202, 1201, 1200, 1706, 1707, 1704, 1705, 1703, 1702, 1701, 1700,
//================== 22320
111, 110, 109, 108, 311, 310, 309, 308, 411, 410, 409, 408, 211, 210, 209, 208,
6, 7, 4, 5, 3, 2, 1, 0, 506, 507, 504, 505, 503, 502, 501, 500,
111, 110, 109, 108, 311, 310, 309, 308, 411, 410, 409, 408, 211, 210, 209, 208,
206, 207, 204, 205, 203, 202, 201, 200, 406, 407, 404, 405, 403, 402, 401, 400,
106, 107, 104, 105, 103, 102, 101, 100, 306, 307, 304, 305, 303, 302, 301, 300,
//================== 22130
1911, 1910, 1909, 1908, 2111, 2110, 2109, 2108, 2211, 2210, 2209, 2208, 2011, 2010, 2009, 2008,
11, 10, 9, 8, 511, 510, 509, 508, 611, 610, 609, 608, 1111, 1110, 1109, 1108,
1806, 1807, 1804, 1805, 1803, 1802, 1801, 1800, 2206, 2207, 2204, 2205, 2203, 2202, 2201, 2200,
2006, 2007, 2004, 2005, 2003, 2002, 2001, 2000, 2206, 2207, 2204, 2205, 2203, 2202, 2201, 2200,
1906, 1907, 1904, 1905, 1903, 1902, 1901, 1900, 2106, 2107, 2104, 2105, 2103, 2102, 2101, 2100,
//================== 22129
1806, 1807, 1804, 1805, 1803, 1802, 1801, 1800, 2306, 2307, 2304, 2305, 2303, 2302, 2301, 2300,
10016, 10017, 10018, 10019, 10020, 10021, 10022, 10023, 10024, 10025, 10026, 10027, 10028, 10029, 10030, 10031,
2006, 2007, 2004, 2005, 2003, 2002, 2001, 2000, 2306, 2307, 2304, 2305, 2303, 2302, 2301, 2300,
10116, 10117, 10118, 10119, 10120, 10121, 10122, 10123, 10124, 10125, 10126, 10127, 10128, 10129, 10130, 10131,
10115, 10114, 10113, 10112, 10111, 10110, 10109, 10108, 10107, 10106, 10105, 10104, 10103, 10102, 10101, 10100,
//================== 15529
10316, 10317, 10318, 10319, 10320, 10321, 10322, 10323, 10324, 10325, 10326, 10327, 10328, 10329, 10330, 10331,
10015, 10014, 10013, 10012, 10011, 10010, 10009, 10008, 10007, 10006, 10005, 10004, 10003, 10002, 10001, 10000,
//================== 15529
10231, 10230, 10229, 10228, 10227, 10226, 10225, 10224, 10223, 10222, 10221, 10220, 10219, 10218, 10217, 10216,
10115, 10114, 10113, 10112, 10111, 10110, 10109, 10108, 10107, 10106, 10105, 10104, 10103, 10102, 10101, 10100,
10315, 10314, 10313, 10312, 10311, 10310, 10309, 10308, 10307, 10306, 10305, 10304, 10303, 10302, 10301, 10300,
10215, 10214, 10213, 10212, 10211, 10210, 10209, 10208, 10207, 10206, 10205, 10204, 10203, 10202, 10201, 10200,
//================== 15528
10216, 10217, 10218, 10219, 10220, 10221, 10222, 10223, 10224, 10225, 10226, 10227, 10228, 10229, 10230, 10231,
10316, 10317, 10318, 10319, 10320, 10321, 10322, 10323, 10324, 10325, 10326, 10327, 10328, 10329, 10330, 10331,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
//================== 334
20116, 20117, 20118, 20119, 20120, 20121, 20122, 20123, 20016, 20017, 20018, 20019, 20020, 20021, 20022, 20023,
//================== 409
20000, 20001, 20002, 20003, 20004, 20005, 20006, 20007, 20008, 20009, 20010, 20011, 20012, 20013, 20014, 20015,
//================== 379
20000, 20001, 20002, 20003, 20004, 20005, -1, 20007, 20008, -1, 20010, 20011, 20012, 20013, 20014, 20015,
//================== 325
20100, 20101, 20102, 20103, 20104, 20105, 20106, 20107, 20108, 20109, 20110, 20111, 20112, 20113, 20114, 20115,
//================== 405
20100, 20101, 20102, 20103, 20104, 20105, 20106, 20107, 20108, 20109, 20110, 20111, 20112, 20113, 20114, 20115
20006, -1, -1, 20009, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
};
@ -270,4 +274,4 @@ void GenMapping(std::string mapFile){
}
#endif
#endif

274
mapping_alpha.h Normal file
View File

@ -0,0 +1,274 @@
#ifndef Mapping_h
#define Mapping_h
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <string>
#include <map>
#include <utility>
#include <TMath.h>
const std::map<int, unsigned short> board = {
{0, 17122}, // id, sn
{1, 17123},
{2, 22320},
{3, 22130},
{4, 22129},
{5, 15529},
{6, 15528},
{7, 334},
{8, 409},
{9, 405}
};
const int nBd = board.size();
const int nV1740 = 7;
const int nV1725 = 3;
//+++++++++++++++++++ detID;
// The detectors are seperated into 2 type: SuperX3, QQQ, and PC
// the SuperX3 has 24 detectors for each kind, wach detector has 12 channels
// the QQQ has 4 detectors for each kind, each detector has 32 channels
// the PC has 2 types, anode and cathode, each has 24 channels
// The detID = Type * 10000 + index * 100 + channel
// fro example, detID(superX3-8, ch-7) = 00807
// use the GenMapping() to get that
const std::vector<int> mapping = {
//================== 17122
806, 807, 804, 805, 803, 802, 801, 800, 1006, 1007, 1004, 1005, 1003, 1002, 1001, 1000,
606, 607, 604, 605, 603, 602, 601, 600, 1106, 1107, 1104, 1105, 1103, 1102, 1101, 1100,
711, 710, 709, 708, 911, 910, 909, 908, 811, 810, 809, 808, 1011, 1010, 1009, 1008,
706, 707, 704, 705, 703, 702, 701, 700, 906, 907, 904, 905, 903, 902, 901, 900,
//================== 17123
1406, 1407, 1404, 1405, 1403, 1402, 1401, 1400, 1606, 1607, 1604, 1605, 1603, 1602, 1601, 1600,
1306, 1307, 1304, 1305, 1303, 1302, 1301, 1300, 1506, 1507, 1504, 1505, 1503, 1502, 1501, 1500,
1311, 1310, 1309, 1308, 1511, 1510, 1509, 1508, 1411, 1410, 1409, 1408, 1611, 1610, 1609, 1608,
1206, 1207, 1204, 1205, 1203, 1202, 1201, 1200, 1706, 1707, 1704, 1705, 1703, 1702, 1701, 1700,
//================== 22320
111, 110, 109, 108, 311, 310, 309, 308, 411, 410, 409, 408, 211, 210, 209, 208,
6, 7, 4, 5, 3, 2, 1, 0, 506, 507, 504, 505, 503, 502, 501, 500,
206, 207, 204, 205, 203, 202, 201, 200, 406, 407, 404, 405, 403, 402, 401, 400,
106, 107, 104, 105, 103, 102, 101, 100, 306, 307, 304, 305, 303, 302, 301, 300,
//================== 22130
1911, 1910, 1909, 1908, 2111, 2110, 2109, 2108, 2211, 2210, 2209, 2208, 2011, 2010, 2009, 2008,
11, 10, 9, 8, 511, 510, 509, 508, 611, 610, 609, 608, 1111, 1110, 1109, 1108,
2006, 2007, 2004, 2005, 2003, 2002, 2001, 2000, 2206, 2207, 2204, 2205, 2203, 2202, 2201, 2200,
1906, 1907, 1904, 1905, 1903, 1902, 1901, 1900, 2106, 2107, 2104, 2105, 2103, 2102, 2101, 2100,
//================== 22129
10016, 10017, 10018, 10019, 10020, 10021, 10022, 10023, 10024, 10025, 10026, 10027, 10028, 10029, 10030, 10031,
1806, 1807, 1804, 1805, 1803, 1802, 1801, 1800, 2306, 2307, 2304, 2305, 2303, 2302, 2301, 2300,
10116, 10117, 10118, 10119, 10120, 10121, 10122, 10123, 10124, 10125, 10126, 10127, 10128, 10129, 10130, 10131,
10115, 10114, 10113, 10112, 10111, 10110, 10109, 10108, 10107, 10106, 10105, 10104, 10103, 10102, 10101, 10100,
//================== 15529
10316, 10317, 10318, 10319, 10320, 10321, 10322, 10323, 10324, 10325, 10326, 10327, 10328, 10329, 10330, 10331,
10015, 10014, 10013, 10012, 10011, 10010, 10009, 10008, 10007, 10006, 10005, 10004, 10003, 10002, 10001, 10000,
10315, 10314, 10313, 10312, 10311, 10310, 10309, 10308, 10307, 10306, 10305, 10304, 10303, 10302, 10301, 10300,
10215, 10214, 10213, 10212, 10211, 10210, 10209, 10208, 10207, 10206, 10205, 10204, 10203, 10202, 10201, 10200,
//================== 15528
10216, 10217, 10218, 10219, 10220, 10221, 10222, 10223, 10224, 10225, 10226, 10227, 10228, 10229, 10230, 10231,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
//================== 334
20116, 20117, 20118, 20119, 20120, 20121, 20122, 20123, 20016, 20017, 20018, 20019, 20020, 20021, 20022, 20023,
//================== 409
20000, 20001, 20002, 20003, 20004, 20005, 20006, 20007, 20008, 20009, 20010, 20011, 20012, 20013, 20014, 20015,
//================== 405
20100, 20101, 20102, 20103, 20104, 20105, 20106, 20107, 20108, 20109, 20110, 20111, 20112, 20113, 20114, 20115
};
void PrintMapping(){
int digiID = 0;
int count = 0;
printf("==================== ID-MAP: \n");
printf("%11s|", ""); for(int i = 0 ; i < 16; i++ ) printf("%7d|", i);
printf("\n");
for(int i = 0 ; i < 12 + 16*8; i++ ) printf("-");
for(size_t i = 0 ; i < mapping.size(); i ++){
if( (i) % 16 == 0 ) {
printf("\n");
if( digiID < nBd ){
if( board.at(digiID) > 1000 ) {
if( count == 3 ) digiID ++;
if( i % 64 == 0 ) {
printf("%11d|", board.at(digiID));
count = 0;
}
}else{
if( count == 1 ) digiID ++;
if( i % 16 == 0 ) {
printf("%11d|", board.at(digiID));
count = 0;
}
}
}
if( count != 0) printf("%11s|", "");
count ++;
}
int typeID = mapping[i] / 10000;
int detID = (mapping[i] - typeID*10000 )/100;
int ch = mapping[i] - typeID*10000 - detID * 100;
if( mapping[i] == -1 ) {
printf("%7s|", "");
}else{
if( typeID == 0){ // SX3
printf("\033[36m%3d(%2d)\033[0m|", detID, ch);
}else if( typeID == 1){ // QQQ
printf("\033[91m%3d(%2d)\033[0m|", detID, ch);
}else if( typeID == 2){ // PC
printf("\033[35m%3d(%2d)\033[0m|", detID, ch);
}else{
}
}
}
printf("\n");
for(int i = 0 ; i < 12 + 16*8; i++ ) printf("-");
printf("\n");
}
void GenMapping(std::string mapFile){
std::vector<int> map;
std::ifstream inputFile(mapFile); // Replace "your_file.txt" with the actual file path
if (!inputFile.is_open()) {
printf("Error: Could not open the file (%s).\n", mapFile.c_str());
return ;
}
std::string line;
// Read the file line by line
while (std::getline(inputFile, line)) {
std::vector<std::string> words;
std::istringstream iss(line);
// Extract words from the current line
while (true) {
std::string word;
if (!(iss >> word)) break; // Break if there are no more words
word.erase(std::remove_if(word.begin(), word.end(), ::isspace), word.end());
words.push_back(word);
}
if( atoi(words[0].c_str()) % 16 == 0 ) printf("=================\n");
int detID = atoi(words[1].c_str())*100;
if(words.size() < 5 ) printf(" hahhahha %s\n", line.c_str());
if( words[2] == "BARREL" ) {
if( words[3] == "FRONTDOWN" ){
int chID = atoi(words[4].c_str());
if( chID % 2 != 0 ) chID -= 1;
detID += chID;
}
if( words[3] == "FRONTUP" ){
int chID = atoi(words[4].c_str());
if( chID % 2 == 0 ) chID += 1;
detID += chID;
}
if( words[3] == "BACK") detID += atoi(words[4].c_str()) + 8;
}
if( words[2] == "FQQQ" ) {
detID += 10000;
if( words[3] == "WEDGE") detID += atoi(words[4].c_str());
if( words[3] == "RING") detID += atoi(words[4].c_str()) + 16;
}
if( words[2] == "PC" ) {
detID += 20000;
if( words[3] == "ANODE") detID += atoi(words[4].c_str());
if( words[3] == "CATHODE") detID += 100 + atoi(words[4].c_str());
}
if( words[2] == "blank") {
detID = -1;
}
map.push_back(detID);
printf("| %5d", detID);
printf("|\n");
}
// Close the file
inputFile.close();
int digiID = 0;
int count = 0;
printf("===============================\n");
for( size_t i = 0; i < ((map.size() +15)/16) * 16; i++){
if( i % 16 == 0) {
printf("\n");
if( digiID < nBd ){
if( board.at(digiID) > 1000 ) {
if( count == 3 ) digiID ++;
if( i % 64 == 0 ) {
printf(" //================== %d\n", board.at(digiID));
count = 0;
}
}else{
if( count == 1 ) digiID ++;
if( i % 16 == 0 ) {
printf(" //================== %d\n", board.at(digiID));
count = 0;
}
}
}
count ++;
}
if( i < map.size() ){
printf(" %5d,", map[i]);
}else{
printf(" %5d,", -1);
}
}
printf("\n\n===============================\n");
printf("sorting mapping and see if there any repeated\n");
std::sort(map.begin(), map.end());
for( size_t i = 1; i < map.size(); i++){
if( map[i] == -1 ) continue;
if( map[i] == map[i-1] ) printf("%5d \n", map[i]);
}
printf("=========== Done. if nothing show, no repeat. \n");
}
#endif

View File

@ -1,496 +1,496 @@
0 2 BARREL FRONTDOWN 7
1 2 BARREL FRONTUP 6
2 2 BARREL FRONTDOWN 5
3 2 BARREL FRONTUP 4
4 2 BARREL FRONTUP 3
5 2 BARREL FRONTDOWN 2
6 2 BARREL FRONTUP 1
7 2 BARREL FRONTDOWN 0
8 4 BARREL FRONTDOWN 7
9 4 BARREL FRONTUP 6
10 4 BARREL FRONTDOWN 5
11 4 BARREL FRONTUP 4
12 4 BARREL FRONTUP 3
13 4 BARREL FRONTDOWN 2
14 4 BARREL FRONTUP 1
15 4 BARREL FRONTDOWN 0
16 0 BARREL FRONTDOWN 7
17 0 BARREL FRONTUP 6
18 0 BARREL FRONTDOWN 5
19 0 BARREL FRONTUP 4
20 0 BARREL FRONTUP 3
21 0 BARREL FRONTDOWN 2
22 0 BARREL FRONTUP 1
23 0 BARREL FRONTDOWN 0
24 5 BARREL FRONTDOWN 7
25 5 BARREL FRONTUP 6
26 5 BARREL FRONTDOWN 5
27 5 BARREL FRONTUP 4
28 5 BARREL FRONTUP 3
29 5 BARREL FRONTDOWN 2
30 5 BARREL FRONTUP 1
31 5 BARREL FRONTDOWN 0
32 1 BARREL BACK 3
33 1 BARREL BACK 2
34 1 BARREL BACK 1
35 1 BARREL BACK 0
36 2 BARREL BACK 3
37 2 BARREL BACK 2
38 2 BARREL BACK 1
39 2 BARREL BACK 0
40 3 BARREL BACK 3
41 3 BARREL BACK 2
42 3 BARREL BACK 1
43 3 BARREL BACK 0
44 4 BARREL BACK 3
45 4 BARREL BACK 2
46 4 BARREL BACK 1
47 4 BARREL BACK 0
48 1 BARREL FRONTDOWN 7
49 1 BARREL FRONTUP 6
50 1 BARREL FRONTDOWN 5
51 1 BARREL FRONTUP 4
52 1 BARREL FRONTUP 3
53 1 BARREL FRONTDOWN 2
54 1 BARREL FRONTUP 1
55 1 BARREL FRONTDOWN 0
56 3 BARREL FRONTDOWN 7
57 3 BARREL FRONTUP 6
58 3 BARREL FRONTDOWN 5
59 3 BARREL FRONTUP 4
60 3 BARREL FRONTUP 3
61 3 BARREL FRONTDOWN 2
62 3 BARREL FRONTUP 1
63 3 BARREL FRONTDOWN 0
64 6 BARREL FRONTDOWN 7
65 6 BARREL FRONTUP 6
66 6 BARREL FRONTDOWN 5
67 6 BARREL FRONTUP 4
68 6 BARREL FRONTUP 3
69 6 BARREL FRONTDOWN 2
70 6 BARREL FRONTUP 1
71 6 BARREL FRONTDOWN 0
72 11 BARREL FRONTDOWN 7
73 11 BARREL FRONTUP 6
74 11 BARREL FRONTDOWN 5
75 11 BARREL FRONTUP 4
76 11 BARREL FRONTUP 3
77 11 BARREL FRONTDOWN 2
78 11 BARREL FRONTUP 1
79 11 BARREL FRONTDOWN 0
80 7 BARREL BACK 3
81 7 BARREL BACK 2
82 7 BARREL BACK 1
83 7 BARREL BACK 0
84 8 BARREL BACK 3
85 8 BARREL BACK 2
86 8 BARREL BACK 1
87 8 BARREL BACK 0
88 9 BARREL BACK 3
89 9 BARREL BACK 2
90 9 BARREL BACK 1
91 9 BARREL BACK 0
92 10 BARREL BACK 3
93 10 BARREL BACK 2
94 10 BARREL BACK 1
95 10 BARREL BACK 0
96 7 BARREL FRONTDOWN 7
97 7 BARREL FRONTUP 6
98 7 BARREL FRONTDOWN 5
99 7 BARREL FRONTUP 4
100 7 BARREL FRONTUP 3
101 7 BARREL FRONTDOWN 2
102 7 BARREL FRONTUP 1
103 7 BARREL FRONTDOWN 0
104 9 BARREL FRONTDOWN 7
105 9 BARREL FRONTUP 6
106 9 BARREL FRONTDOWN 5
107 9 BARREL FRONTUP 4
108 9 BARREL FRONTUP 3
109 9 BARREL FRONTDOWN 2
110 9 BARREL FRONTUP 1
111 9 BARREL FRONTDOWN 0
112 8 BARREL FRONTDOWN 7
113 8 BARREL FRONTUP 6
114 8 BARREL FRONTDOWN 5
115 8 BARREL FRONTUP 4
116 8 BARREL FRONTUP 3
117 8 BARREL FRONTDOWN 2
118 8 BARREL FRONTUP 1
119 8 BARREL FRONTDOWN 0
120 10 BARREL FRONTDOWN 7
121 10 BARREL FRONTUP 6
122 10 BARREL FRONTDOWN 5
123 10 BARREL FRONTUP 4
124 10 BARREL FRONTUP 3
125 10 BARREL FRONTDOWN 2
126 10 BARREL FRONTUP 1
127 10 BARREL FRONTDOWN 0
128 19 BARREL BACK 3
129 19 BARREL BACK 2
130 19 BARREL BACK 1
131 19 BARREL BACK 0
132 20 BARREL BACK 3
133 20 BARREL BACK 2
134 20 BARREL BACK 1
135 20 BARREL BACK 0
136 21 BARREL BACK 3
137 21 BARREL BACK 2
138 21 BARREL BACK 1
139 21 BARREL BACK 0
140 22 BARREL BACK 3
141 22 BARREL BACK 2
142 22 BARREL BACK 1
143 22 BARREL BACK 0
144 19 BARREL FRONTDOWN 7
145 19 BARREL FRONTUP 6
146 19 BARREL FRONTDOWN 5
147 19 BARREL FRONTUP 4
148 19 BARREL FRONTUP 3
149 19 BARREL FRONTDOWN 2
150 19 BARREL FRONTUP 1
151 19 BARREL FRONTDOWN 0
152 21 BARREL FRONTDOWN 7
153 21 BARREL FRONTUP 6
154 21 BARREL FRONTDOWN 5
155 21 BARREL FRONTUP 4
156 21 BARREL FRONTUP 3
157 21 BARREL FRONTDOWN 2
158 21 BARREL FRONTUP 1
159 21 BARREL FRONTDOWN 0
160 18 BARREL FRONTDOWN 7
161 18 BARREL FRONTUP 6
162 18 BARREL FRONTDOWN 5
163 18 BARREL FRONTUP 4
164 18 BARREL FRONTUP 3
165 18 BARREL FRONTDOWN 2
166 18 BARREL FRONTUP 1
167 18 BARREL FRONTDOWN 0
168 23 BARREL FRONTDOWN 7
169 23 BARREL FRONTUP 6
170 23 BARREL FRONTDOWN 5
171 23 BARREL FRONTUP 4
172 23 BARREL FRONTUP 3
173 23 BARREL FRONTDOWN 2
174 23 BARREL FRONTUP 1
175 23 BARREL FRONTDOWN 0
176 20 BARREL FRONTDOWN 7
177 20 BARREL FRONTUP 6
178 20 BARREL FRONTDOWN 5
179 20 BARREL FRONTUP 4
180 20 BARREL FRONTUP 3
181 20 BARREL FRONTDOWN 2
182 20 BARREL FRONTUP 1
183 20 BARREL FRONTDOWN 0
184 22 BARREL FRONTDOWN 7
185 22 BARREL FRONTUP 6
186 22 BARREL FRONTDOWN 5
187 22 BARREL FRONTUP 4
188 22 BARREL FRONTUP 3
189 22 BARREL FRONTDOWN 2
190 22 BARREL FRONTUP 1
191 22 BARREL FRONTDOWN 0
192 13 BARREL BACK 3
193 13 BARREL BACK 2
194 13 BARREL BACK 1
195 13 BARREL BACK 0
196 14 BARREL BACK 3
197 14 BARREL BACK 2
198 14 BARREL BACK 1
199 14 BARREL BACK 0
200 15 BARREL BACK 3
201 15 BARREL BACK 2
202 15 BARREL BACK 1
203 15 BARREL BACK 0
204 16 BARREL BACK 3
205 16 BARREL BACK 2
206 16 BARREL BACK 1
207 16 BARREL BACK 0
208 0 BARREL BACK 3
209 0 BARREL BACK 2
210 0 BARREL BACK 1
211 0 BARREL BACK 0
212 5 BARREL BACK 3
213 5 BARREL BACK 2
214 5 BARREL BACK 1
215 5 BARREL BACK 0
216 6 BARREL BACK 3
217 6 BARREL BACK 2
218 6 BARREL BACK 1
219 6 BARREL BACK 0
0 8 BARREL FRONTDOWN 7
1 8 BARREL FRONTUP 6
2 8 BARREL FRONTDOWN 5
3 8 BARREL FRONTUP 4
4 8 BARREL FRONTUP 3
5 8 BARREL FRONTDOWN 2
6 8 BARREL FRONTUP 1
7 8 BARREL FRONTDOWN 0
8 10 BARREL FRONTDOWN 7
9 10 BARREL FRONTUP 6
10 10 BARREL FRONTDOWN 5
11 10 BARREL FRONTUP 4
12 10 BARREL FRONTUP 3
13 10 BARREL FRONTDOWN 2
14 10 BARREL FRONTUP 1
15 10 BARREL FRONTDOWN 0
16 6 BARREL FRONTDOWN 7
17 6 BARREL FRONTUP 6
18 6 BARREL FRONTDOWN 5
19 6 BARREL FRONTUP 4
20 6 BARREL FRONTUP 3
21 6 BARREL FRONTDOWN 2
22 6 BARREL FRONTUP 1
23 6 BARREL FRONTDOWN 0
24 11 BARREL FRONTDOWN 7
25 11 BARREL FRONTUP 6
26 11 BARREL FRONTDOWN 5
27 11 BARREL FRONTUP 4
28 11 BARREL FRONTUP 3
29 11 BARREL FRONTDOWN 2
30 11 BARREL FRONTUP 1
31 11 BARREL FRONTDOWN 0
32 7 BARREL BACK 3
33 7 BARREL BACK 2
34 7 BARREL BACK 1
35 7 BARREL BACK 0
36 9 BARREL BACK 3
37 9 BARREL BACK 2
38 9 BARREL BACK 1
39 9 BARREL BACK 0
40 10 BARREL BACK 3
41 10 BARREL BACK 2
42 10 BARREL BACK 1
43 10 BARREL BACK 0
44 8 BARREL BACK 3
45 8 BARREL BACK 2
46 8 BARREL BACK 1
47 8 BARREL BACK 0
48 7 BARREL FRONTDOWN 7
49 7 BARREL FRONTUP 6
50 7 BARREL FRONTDOWN 5
51 7 BARREL FRONTUP 4
52 7 BARREL FRONTUP 3
53 7 BARREL FRONTDOWN 2
54 7 BARREL FRONTUP 1
55 7 BARREL FRONTDOWN 0
56 9 BARREL FRONTDOWN 7
57 9 BARREL FRONTUP 6
58 9 BARREL FRONTDOWN 5
59 9 BARREL FRONTUP 4
60 9 BARREL FRONTUP 3
61 9 BARREL FRONTDOWN 2
62 9 BARREL FRONTUP 1
63 9 BARREL FRONTDOWN 0
64 14 BARREL FRONTDOWN 7
65 14 BARREL FRONTUP 6
66 14 BARREL FRONTDOWN 5
67 14 BARREL FRONTUP 4
68 14 BARREL FRONTUP 3
69 14 BARREL FRONTDOWN 2
70 14 BARREL FRONTUP 1
71 14 BARREL FRONTDOWN 0
72 16 BARREL FRONTDOWN 7
73 16 BARREL FRONTUP 6
74 16 BARREL FRONTDOWN 5
75 16 BARREL FRONTUP 4
76 16 BARREL FRONTUP 3
77 16 BARREL FRONTDOWN 2
78 16 BARREL FRONTUP 1
79 16 BARREL FRONTDOWN 0
80 13 BARREL FRONTDOWN 7
81 13 BARREL FRONTUP 6
82 13 BARREL FRONTDOWN 5
83 13 BARREL FRONTUP 4
84 13 BARREL FRONTUP 3
85 13 BARREL FRONTDOWN 2
86 13 BARREL FRONTUP 1
87 13 BARREL FRONTDOWN 0
88 15 BARREL FRONTDOWN 7
89 15 BARREL FRONTUP 6
90 15 BARREL FRONTDOWN 5
91 15 BARREL FRONTUP 4
92 15 BARREL FRONTUP 3
93 15 BARREL FRONTDOWN 2
94 15 BARREL FRONTUP 1
95 15 BARREL FRONTDOWN 0
96 13 BARREL BACK 3
97 13 BARREL BACK 2
98 13 BARREL BACK 1
99 13 BARREL BACK 0
100 17 BARREL BACK 3
101 17 BARREL BACK 2
102 17 BARREL BACK 1
103 17 BARREL BACK 0
104 16 BARREL BACK 3
105 16 BARREL BACK 2
106 16 BARREL BACK 1
107 16 BARREL BACK 0
108 14 BARREL BACK 3
109 14 BARREL BACK 2
110 14 BARREL BACK 1
111 14 BARREL BACK 0
112 12 BARREL FRONTDOWN 7
113 12 BARREL FRONTUP 6
114 12 BARREL FRONTDOWN 5
115 12 BARREL FRONTUP 4
116 12 BARREL FRONTUP 3
117 12 BARREL FRONTDOWN 2
118 12 BARREL FRONTUP 1
119 12 BARREL FRONTDOWN 0
120 17 BARREL FRONTDOWN 7
121 17 BARREL FRONTUP 6
122 17 BARREL FRONTDOWN 5
123 17 BARREL FRONTUP 4
124 17 BARREL FRONTUP 3
125 17 BARREL FRONTDOWN 2
126 17 BARREL FRONTUP 1
127 17 BARREL FRONTDOWN 0
128 0 BARREL FRONTDOWN 7
129 0 BARREL FRONTUP 6
130 0 BARREL FRONTDOWN 5
131 0 BARREL FRONTUP 4
132 0 BARREL FRONTUP 3
133 0 BARREL FRONTDOWN 2
134 0 BARREL FRONTUP 1
135 0 BARREL FRONTDOWN 0
136 5 BARREL FRONTDOWN 7
137 5 BARREL FRONTUP 6
138 5 BARREL FRONTDOWN 5
139 5 BARREL FRONTUP 4
140 5 BARREL FRONTUP 3
141 5 BARREL FRONTDOWN 2
142 5 BARREL FRONTUP 1
143 5 BARREL FRONTDOWN 0
144 1 BARREL BACK 3
145 1 BARREL BACK 2
146 1 BARREL BACK 1
147 1 BARREL BACK 0
148 3 BARREL BACK 3
149 3 BARREL BACK 2
150 3 BARREL BACK 1
151 3 BARREL BACK 0
152 4 BARREL BACK 3
153 4 BARREL BACK 2
154 4 BARREL BACK 1
155 4 BARREL BACK 0
156 2 BARREL BACK 3
157 2 BARREL BACK 2
158 2 BARREL BACK 1
159 2 BARREL BACK 0
160 2 BARREL FRONTDOWN 7
161 2 BARREL FRONTUP 6
162 2 BARREL FRONTDOWN 5
163 2 BARREL FRONTUP 4
164 2 BARREL FRONTUP 3
165 2 BARREL FRONTDOWN 2
166 2 BARREL FRONTUP 1
167 2 BARREL FRONTDOWN 0
168 4 BARREL FRONTDOWN 7
169 4 BARREL FRONTUP 6
170 4 BARREL FRONTDOWN 5
171 4 BARREL FRONTUP 4
172 4 BARREL FRONTUP 3
173 4 BARREL FRONTDOWN 2
174 4 BARREL FRONTUP 1
175 4 BARREL FRONTDOWN 0
176 1 BARREL FRONTDOWN 7
177 1 BARREL FRONTUP 6
178 1 BARREL FRONTDOWN 5
179 1 BARREL FRONTUP 4
180 1 BARREL FRONTUP 3
181 1 BARREL FRONTDOWN 2
182 1 BARREL FRONTUP 1
183 1 BARREL FRONTDOWN 0
184 3 BARREL FRONTDOWN 7
185 3 BARREL FRONTUP 6
186 3 BARREL FRONTDOWN 5
187 3 BARREL FRONTUP 4
188 3 BARREL FRONTUP 3
189 3 BARREL FRONTDOWN 2
190 3 BARREL FRONTUP 1
191 3 BARREL FRONTDOWN 0
192 19 BARREL BACK 3
193 19 BARREL BACK 2
194 19 BARREL BACK 1
195 19 BARREL BACK 0
196 21 BARREL BACK 3
197 21 BARREL BACK 2
198 21 BARREL BACK 1
199 21 BARREL BACK 0
200 22 BARREL BACK 3
201 22 BARREL BACK 2
202 22 BARREL BACK 1
203 22 BARREL BACK 0
204 20 BARREL BACK 3
205 20 BARREL BACK 2
206 20 BARREL BACK 1
207 20 BARREL BACK 0
208 0 BARREL BACK 3
209 0 BARREL BACK 2
210 0 BARREL BACK 1
211 0 BARREL BACK 0
212 5 BARREL BACK 3
213 5 BARREL BACK 2
214 5 BARREL BACK 1
215 5 BARREL BACK 0
216 6 BARREL BACK 3
217 6 BARREL BACK 2
218 6 BARREL BACK 1
219 6 BARREL BACK 0
220 11 BARREL BACK 3
221 11 BARREL BACK 2
222 11 BARREL BACK 1
223 11 BARREL BACK 0
224 14 BARREL FRONTDOWN 7
225 14 BARREL FRONTUP 6
226 14 BARREL FRONTDOWN 5
227 14 BARREL FRONTUP 4
228 14 BARREL FRONTUP 3
229 14 BARREL FRONTDOWN 2
230 14 BARREL FRONTUP 1
231 14 BARREL FRONTDOWN 0
232 16 BARREL FRONTDOWN 7
233 16 BARREL FRONTUP 6
234 16 BARREL FRONTDOWN 5
235 16 BARREL FRONTUP 4
236 16 BARREL FRONTUP 3
237 16 BARREL FRONTDOWN 2
238 16 BARREL FRONTUP 1
239 16 BARREL FRONTDOWN 0
240 13 BARREL FRONTDOWN 7
241 13 BARREL FRONTUP 6
242 13 BARREL FRONTDOWN 5
243 13 BARREL FRONTUP 4
244 13 BARREL FRONTUP 3
245 13 BARREL FRONTDOWN 2
246 13 BARREL FRONTUP 1
247 13 BARREL FRONTDOWN 0
248 15 BARREL FRONTDOWN 7
249 15 BARREL FRONTUP 6
250 15 BARREL FRONTDOWN 5
251 15 BARREL FRONTUP 4
252 15 BARREL FRONTUP 3
253 15 BARREL FRONTDOWN 2
254 15 BARREL FRONTUP 1
255 15 BARREL FRONTDOWN 0
256 0 FQQQ WEDGE 15
257 0 FQQQ WEDGE 14
258 0 FQQQ WEDGE 13
259 0 FQQQ WEDGE 12
260 0 FQQQ WEDGE 11
261 0 FQQQ WEDGE 10
262 0 FQQQ WEDGE 9
263 0 FQQQ WEDGE 8
264 0 FQQQ WEDGE 7
265 0 FQQQ WEDGE 6
266 0 FQQQ WEDGE 5
267 0 FQQQ WEDGE 4
268 0 FQQQ WEDGE 3
269 0 FQQQ WEDGE 2
270 0 FQQQ WEDGE 1
271 0 FQQQ WEDGE 0
272 12 BARREL FRONTDOWN 7
273 12 BARREL FRONTUP 6
274 12 BARREL FRONTDOWN 5
275 12 BARREL FRONTUP 4
276 12 BARREL FRONTUP 3
277 12 BARREL FRONTDOWN 2
278 12 BARREL FRONTUP 1
279 12 BARREL FRONTDOWN 0
280 17 BARREL FRONTDOWN 7
281 17 BARREL FRONTUP 6
282 17 BARREL FRONTDOWN 5
283 17 BARREL FRONTUP 4
284 17 BARREL FRONTUP 3
285 17 BARREL FRONTDOWN 2
286 17 BARREL FRONTUP 1
287 17 BARREL FRONTDOWN 0
288 1 FQQQ WEDGE 15
289 1 FQQQ WEDGE 14
290 1 FQQQ WEDGE 13
291 1 FQQQ WEDGE 12
292 1 FQQQ WEDGE 11
293 1 FQQQ WEDGE 10
294 1 FQQQ WEDGE 9
295 1 FQQQ WEDGE 8
296 1 FQQQ WEDGE 7
297 1 FQQQ WEDGE 6
298 1 FQQQ WEDGE 5
299 1 FQQQ WEDGE 4
300 1 FQQQ WEDGE 3
301 1 FQQQ WEDGE 2
302 1 FQQQ WEDGE 1
303 1 FQQQ WEDGE 0
304 1 FQQQ RING 0
305 1 FQQQ RING 1
306 1 FQQQ RING 2
307 1 FQQQ RING 3
308 1 FQQQ RING 4
309 1 FQQQ RING 5
310 1 FQQQ RING 6
311 1 FQQQ RING 7
312 1 FQQQ RING 8
313 1 FQQQ RING 9
314 1 FQQQ RING 10
315 1 FQQQ RING 11
316 1 FQQQ RING 12
317 1 FQQQ RING 13
318 1 FQQQ RING 14
319 1 FQQQ RING 15
320 0 FQQQ RING 0
321 0 FQQQ RING 1
322 0 FQQQ RING 2
323 0 FQQQ RING 3
324 0 FQQQ RING 4
325 0 FQQQ RING 5
326 0 FQQQ RING 6
327 0 FQQQ RING 7
328 0 FQQQ RING 8
329 0 FQQQ RING 9
330 0 FQQQ RING 10
331 0 FQQQ RING 11
332 0 FQQQ RING 12
333 0 FQQQ RING 13
334 0 FQQQ RING 14
335 0 FQQQ RING 15
336 2 FQQQ WEDGE 15
337 2 FQQQ WEDGE 14
338 2 FQQQ WEDGE 13
339 2 FQQQ WEDGE 12
340 2 FQQQ WEDGE 11
341 2 FQQQ WEDGE 10
342 2 FQQQ WEDGE 9
343 2 FQQQ WEDGE 8
344 2 FQQQ WEDGE 7
345 2 FQQQ WEDGE 6
346 2 FQQQ WEDGE 5
347 2 FQQQ WEDGE 4
348 2 FQQQ WEDGE 3
349 2 FQQQ WEDGE 2
350 2 FQQQ WEDGE 1
351 2 FQQQ WEDGE 0
352 2 FQQQ RING 0
353 2 FQQQ RING 1
354 2 FQQQ RING 2
355 2 FQQQ RING 3
356 2 FQQQ RING 4
357 2 FQQQ RING 5
358 2 FQQQ RING 6
359 2 FQQQ RING 7
360 2 FQQQ RING 8
361 2 FQQQ RING 9
362 2 FQQQ RING 10
363 2 FQQQ RING 11
364 2 FQQQ RING 12
365 2 FQQQ RING 13
366 2 FQQQ RING 14
367 2 FQQQ RING 15
368 3 FQQQ WEDGE 15
369 3 FQQQ WEDGE 14
370 3 FQQQ WEDGE 13
371 3 FQQQ WEDGE 12
372 3 FQQQ WEDGE 11
373 3 FQQQ WEDGE 10
374 3 FQQQ WEDGE 9
375 3 FQQQ WEDGE 8
376 3 FQQQ WEDGE 7
377 3 FQQQ WEDGE 6
378 3 FQQQ WEDGE 5
379 3 FQQQ WEDGE 4
380 3 FQQQ WEDGE 3
381 3 FQQQ WEDGE 2
382 3 FQQQ WEDGE 1
383 3 FQQQ WEDGE 0
384 0 blank blank 0
385 0 blank blank 1
386 0 blank blank 2
387 0 blank blank 3
388 0 blank blank 4
389 0 blank blank 5
390 0 blank blank 6
391 0 blank blank 7
392 0 blank blank 8
393 0 blank blank 9
394 0 blank blank 10
395 0 blank blank 11
396 0 blank blank 12
397 0 blank blank 13
398 0 blank blank 14
399 0 blank blank 15
400 3 FQQQ RING 0
401 3 FQQQ RING 1
402 3 FQQQ RING 2
403 3 FQQQ RING 3
404 3 FQQQ RING 4
405 3 FQQQ RING 5
406 3 FQQQ RING 6
407 3 FQQQ RING 7
408 3 FQQQ RING 8
409 3 FQQQ RING 9
410 3 FQQQ RING 10
411 3 FQQQ RING 11
412 3 FQQQ RING 12
413 3 FQQQ RING 13
414 3 FQQQ RING 14
415 3 FQQQ RING 15
416 0 blank blank 0
417 0 blank blank 1
418 0 blank blank 2
419 0 blank blank 3
420 0 blank blank 4
421 0 blank blank 5
422 0 blank blank 6
423 0 blank blank 7
424 0 blank blank 8
425 0 blank blank 9
426 0 blank blank 10
427 0 blank blank 11
428 0 blank blank 12
429 0 blank blank 13
430 0 blank blank 14
431 0 blank blank 15
432 0 blank blank 0
433 0 blank blank 1
434 0 blank blank 2
435 0 blank blank 3
436 0 blank blank 4
437 0 blank blank 5
438 0 blank blank 6
439 0 blank blank 7
440 0 blank blank 8
441 0 blank blank 9
442 0 blank blank 10
443 0 blank blank 11
444 0 blank blank 12
445 0 blank blank 13
446 0 blank blank 14
447 0 blank blank 15
448 0 PC CATHODE 16
449 0 PC CATHODE 17
450 0 PC CATHODE 18
451 0 PC CATHODE 19
452 0 PC CATHODE 20
453 0 PC CATHODE 21
454 0 PC CATHODE 22
455 0 PC CATHODE 23
457 0 PC ANODE 16
458 0 PC ANODE 17
459 0 PC ANODE 18
460 0 PC ANODE 19
461 0 PC ANODE 20
462 0 PC ANODE 21
463 0 PC ANODE 22
464 0 PC ANODE 23
465 0 PC ANODE 0
466 0 PC ANODE 1
467 0 PC ANODE 2
468 0 PC ANODE 3
469 0 PC ANODE 4
470 0 PC ANODE 5
471 0 PC ANODE 6
472 0 PC ANODE 7
473 0 PC ANODE 8
474 0 PC ANODE 9
475 0 PC ANODE 10
476 0 PC ANODE 11
477 0 PC ANODE 12
478 0 PC ANODE 13
479 0 PC ANODE 14
480 0 PC ANODE 15
481 0 PC CATHODE 0
482 0 PC CATHODE 1
483 0 PC CATHODE 2
484 0 PC CATHODE 3
485 0 PC CATHODE 4
486 0 PC CATHODE 5
487 0 PC CATHODE 6
488 0 PC CATHODE 7
489 0 PC CATHODE 8
490 0 PC CATHODE 9
491 0 PC CATHODE 10
492 0 PC CATHODE 11
493 0 PC CATHODE 12
494 0 PC CATHODE 13
495 0 PC CATHODE 14
496 0 PC CATHODE 15
224 20 BARREL FRONTDOWN 7
225 20 BARREL FRONTUP 6
226 20 BARREL FRONTDOWN 5
227 20 BARREL FRONTUP 4
228 20 BARREL FRONTUP 3
229 20 BARREL FRONTDOWN 2
230 20 BARREL FRONTUP 1
231 20 BARREL FRONTDOWN 0
232 22 BARREL FRONTDOWN 7
233 22 BARREL FRONTUP 6
234 22 BARREL FRONTDOWN 5
235 22 BARREL FRONTUP 4
236 22 BARREL FRONTUP 3
237 22 BARREL FRONTDOWN 2
238 22 BARREL FRONTUP 1
239 22 BARREL FRONTDOWN 0
240 19 BARREL FRONTDOWN 7
241 19 BARREL FRONTUP 6
242 19 BARREL FRONTDOWN 5
243 19 BARREL FRONTUP 4
244 19 BARREL FRONTUP 3
245 19 BARREL FRONTDOWN 2
246 19 BARREL FRONTUP 1
247 19 BARREL FRONTDOWN 0
248 21 BARREL FRONTDOWN 7
249 21 BARREL FRONTUP 6
250 21 BARREL FRONTDOWN 5
251 21 BARREL FRONTUP 4
252 21 BARREL FRONTUP 3
253 21 BARREL FRONTDOWN 2
254 21 BARREL FRONTUP 1
255 21 BARREL FRONTDOWN 0
256 18 BARREL FRONTDOWN 7
257 18 BARREL FRONTUP 6
258 18 BARREL FRONTDOWN 5
259 18 BARREL FRONTUP 4
260 18 BARREL FRONTUP 3
261 18 BARREL FRONTDOWN 2
262 18 BARREL FRONTUP 1
263 18 BARREL FRONTDOWN 0
264 23 BARREL FRONTDOWN 7
265 23 BARREL FRONTUP 6
266 23 BARREL FRONTDOWN 5
267 23 BARREL FRONTUP 4
268 23 BARREL FRONTUP 3
269 23 BARREL FRONTDOWN 2
270 23 BARREL FRONTUP 1
271 23 BARREL FRONTDOWN 0
272 0 FQQQ RING 0
273 0 FQQQ RING 1
274 0 FQQQ RING 2
275 0 FQQQ RING 3
276 0 FQQQ RING 4
277 0 FQQQ RING 5
278 0 FQQQ RING 6
279 0 FQQQ RING 7
280 0 FQQQ RING 8
281 0 FQQQ RING 9
282 0 FQQQ RING 10
283 0 FQQQ RING 11
284 0 FQQQ RING 12
285 0 FQQQ RING 13
286 0 FQQQ RING 14
287 0 FQQQ RING 15
288 1 FQQQ RING 0
289 1 FQQQ RING 1
290 1 FQQQ RING 2
291 1 FQQQ RING 3
292 1 FQQQ RING 4
293 1 FQQQ RING 5
294 1 FQQQ RING 6
295 1 FQQQ RING 7
296 1 FQQQ RING 8
297 1 FQQQ RING 9
298 1 FQQQ RING 10
299 1 FQQQ RING 11
300 1 FQQQ RING 12
301 1 FQQQ RING 13
302 1 FQQQ RING 14
303 1 FQQQ RING 15
304 1 FQQQ WEDGE 15
305 1 FQQQ WEDGE 14
306 1 FQQQ WEDGE 13
307 1 FQQQ WEDGE 12
308 1 FQQQ WEDGE 11
309 1 FQQQ WEDGE 10
310 1 FQQQ WEDGE 9
311 1 FQQQ WEDGE 8
312 1 FQQQ WEDGE 7
313 1 FQQQ WEDGE 6
314 1 FQQQ WEDGE 5
315 1 FQQQ WEDGE 4
316 1 FQQQ WEDGE 3
317 1 FQQQ WEDGE 2
318 1 FQQQ WEDGE 1
319 1 FQQQ WEDGE 0
320 2 FQQQ RING 15
321 2 FQQQ RING 14
322 2 FQQQ RING 13
323 2 FQQQ RING 12
324 2 FQQQ RING 11
325 2 FQQQ RING 10
326 2 FQQQ RING 9
327 2 FQQQ RING 8
328 2 FQQQ RING 7
329 2 FQQQ RING 6
330 2 FQQQ RING 5
331 2 FQQQ RING 4
332 2 FQQQ RING 3
333 2 FQQQ RING 2
334 2 FQQQ RING 1
335 2 FQQQ RING 0
336 0 FQQQ WEDGE 15
337 0 FQQQ WEDGE 14
338 0 FQQQ WEDGE 13
339 0 FQQQ WEDGE 12
340 0 FQQQ WEDGE 11
341 0 FQQQ WEDGE 10
342 0 FQQQ WEDGE 9
343 0 FQQQ WEDGE 8
344 0 FQQQ WEDGE 7
345 0 FQQQ WEDGE 6
346 0 FQQQ WEDGE 5
347 0 FQQQ WEDGE 4
348 0 FQQQ WEDGE 3
349 0 FQQQ WEDGE 2
350 0 FQQQ WEDGE 1
351 0 FQQQ WEDGE 0
352 2 FQQQ WEDGE 15
353 2 FQQQ WEDGE 14
354 2 FQQQ WEDGE 13
355 2 FQQQ WEDGE 12
356 2 FQQQ WEDGE 11
357 2 FQQQ WEDGE 10
358 2 FQQQ WEDGE 9
359 2 FQQQ WEDGE 8
360 2 FQQQ WEDGE 7
361 2 FQQQ WEDGE 6
362 2 FQQQ WEDGE 5
363 2 FQQQ WEDGE 4
364 2 FQQQ WEDGE 3
365 2 FQQQ WEDGE 2
366 2 FQQQ WEDGE 1
367 2 FQQQ WEDGE 0
368 3 FQQQ WEDGE 15
369 3 FQQQ WEDGE 14
370 3 FQQQ WEDGE 13
371 3 FQQQ WEDGE 12
372 3 FQQQ WEDGE 11
373 3 FQQQ WEDGE 10
374 3 FQQQ WEDGE 9
375 3 FQQQ WEDGE 8
376 3 FQQQ WEDGE 7
377 3 FQQQ WEDGE 6
378 3 FQQQ WEDGE 5
379 3 FQQQ WEDGE 4
380 3 FQQQ WEDGE 3
381 3 FQQQ WEDGE 2
382 3 FQQQ WEDGE 1
383 3 FQQQ WEDGE 0
384 3 FQQQ RING 0
385 3 FQQQ RING 1
386 3 FQQQ RING 2
387 3 FQQQ RING 3
388 3 FQQQ RING 4
389 3 FQQQ RING 5
390 3 FQQQ RING 6
391 3 FQQQ RING 7
392 3 FQQQ RING 8
393 3 FQQQ RING 9
394 3 FQQQ RING 10
395 3 FQQQ RING 11
396 3 FQQQ RING 12
397 3 FQQQ RING 13
398 3 FQQQ RING 14
399 3 FQQQ RING 15
400 0 blank blank 0
401 0 blank blank 1
402 0 blank blank 2
403 0 blank blank 3
404 0 blank blank 4
405 0 blank blank 5
406 0 blank blank 6
407 0 blank blank 7
408 0 blank blank 8
409 0 blank blank 9
410 0 blank blank 10
411 0 blank blank 11
412 0 blank blank 12
413 0 blank blank 13
414 0 blank blank 14
415 0 blank blank 15
416 0 blank blank 1
417 0 blank blank 2
418 0 blank blank 3
419 0 blank blank 4
420 0 blank blank 5
421 0 blank blank 6
422 0 blank blank 7
423 0 blank blank 8
424 0 blank blank 9
425 0 blank blank 10
426 0 blank blank 11
427 0 blank blank 12
428 0 blank blank 13
429 0 blank blank 14
430 0 blank blank 15
431 0 blank blank 0
432 0 blank blank 1
433 0 blank blank 2
434 0 blank blank 3
435 0 blank blank 4
436 0 blank blank 5
437 0 blank blank 6
438 0 blank blank 7
439 0 blank blank 8
440 0 blank blank 9
441 0 blank blank 10
442 0 blank blank 11
443 0 blank blank 12
444 0 blank blank 13
445 0 blank blank 14
446 0 blank blank 15
447 0 blank blank 15
448 0 PC CATHODE 16
449 0 PC CATHODE 17
450 0 PC CATHODE 18
451 0 PC CATHODE 19
452 0 PC CATHODE 20
453 0 PC CATHODE 21
454 0 PC CATHODE 22
455 0 PC CATHODE 23
456 0 PC ANODE 16
457 0 PC ANODE 17
458 0 PC ANODE 18
459 0 PC ANODE 19
460 0 PC ANODE 20
461 0 PC ANODE 21
462 0 PC ANODE 22
463 0 PC ANODE 23
464 0 PC ANODE 0
465 0 PC ANODE 1
466 0 PC ANODE 2
467 0 PC ANODE 3
468 0 PC ANODE 4
469 0 PC ANODE 5
470 0 PC ANODE 6
471 0 PC ANODE 7
472 0 PC ANODE 8
473 0 PC ANODE 9
474 0 PC ANODE 10
475 0 PC ANODE 11
476 0 PC ANODE 12
477 0 PC ANODE 13
478 0 PC ANODE 14
479 0 PC ANODE 15
480 0 PC CATHODE 0
481 0 PC CATHODE 1
482 0 PC CATHODE 2
483 0 PC CATHODE 3
484 0 PC CATHODE 4
485 0 PC CATHODE 5
486 0 PC CATHODE 6
487 0 PC CATHODE 7
488 0 PC CATHODE 8
489 0 PC CATHODE 9
490 0 PC CATHODE 10
491 0 PC CATHODE 11
492 0 PC CATHODE 12
493 0 PC CATHODE 13
494 0 PC CATHODE 14
495 0 PC CATHODE 15

15
processRun.C Normal file
View File

@ -0,0 +1,15 @@
#include "TFile.h"
#include "TString.h"
#include "TROOT.h"
#include "TTree.h"
void processRun(TString runFile){
TFile * file = new TFile(runFile);
TTree * tree = (TTree *) file->Get("tree");
tree->Process("Analyzer.C+");
}

View File

@ -289,4 +289,4 @@ void script(TString fileName = "", int maxEvent = -1){
//haha->DrawDeducedTrack(sx3.hitPos, wireID.first, wireID.second);
}
}