From c8b52b3b7eae7ae3f5689d4fccd2eba9562cebde Mon Sep 17 00:00:00 2001 From: clement <clement@ganp408.ganil.local> Date: Mon, 7 Mar 2022 14:30:47 +0100 Subject: [PATCH] Major Improovement in EXOGAM PSA --- AnalysisADNE.C | 2 +- GUser.C | 16 ++- ListRun.txt | 3 +- TExogam2.cxx | 176 ++++++++++++++++++++++++++----- TExogam2.h | 14 ++- Utils/files.h | 266 +++++++++++++++++++++++++++++++++++++++++++++++ Utils/psa.txt | 6 ++ Utils/root2spe | Bin 0 -> 35915 bytes Utils/root2spe.C | 264 ++++++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 713 insertions(+), 34 deletions(-) create mode 100755 Utils/files.h create mode 100644 Utils/psa.txt create mode 100755 Utils/root2spe create mode 100755 Utils/root2spe.C diff --git a/AnalysisADNE.C b/AnalysisADNE.C index b16a40d..19436ff 100644 --- a/AnalysisADNE.C +++ b/AnalysisADNE.C @@ -77,7 +77,7 @@ int main(){ cerr<< "File Open"<<endl; printf("\033[32mInfo:: File Open\033[m \n"); //schaine.ReplaceAll("/space/clement/space/AGATA/OutMerger/",""); - //schaine.ReplaceAll("/data/exogamX/e826/acquisition/run/",""); + // schaine.ReplaceAll("/data/exogamX/e826/acquisition/run/",""); schaine.ReplaceAll("/data/e826X/e826/acquisition/run/",""); //schaine.ReplaceAll("/data/lise_zddX/test/acquisition/run/",""); if(schaine.BeginsWith("run_")){ diff --git a/GUser.C b/GUser.C index 7a57c72..4d1f985 100644 --- a/GUser.C +++ b/GUser.C @@ -101,7 +101,7 @@ GUser::GUser (GDevice* _fDevIn, GDevice* _fDevOut) fExogam2->ActivateGOCCETrack(false); //activate a second level of checking for GOCCE - fExogam2->SetPromptGate(0,64000); + fExogam2->SetPromptGate(0,1e5); fExogam2->SetCloverPosition(0,0,141.); //ecc# flange# dis[mm] // from 2022 and numexo2 eccId==flangeId @@ -192,8 +192,8 @@ void GUser::InitUser() if(fExogam2->IsCloverActive(k)){ MySpectraList->AddSpectrum(fExogam2->fMyHistoCloverECal[k],"Exogam/Clover_ECal"); MySpectraList->AddSpectrum(fExogam2->fMyHistoCloverECalACAdd[k],"Exogam/Clover_ECalACAdd"); - MySpectraList->AddSpectrum(fExogam2->fMyHistoCloverECalACAdd_TC[k],"Exogam/Clover_ECalACAdd_TC"); - MySpectraList->AddSpectrum(fExogam2->fMyHistoCloverECalACAdd_TQ[k],"Exogam/Clover_ECalACAddDC_TQ"); + MySpectraList->AddSpectrum(fExogam2->fMyHistoCloverECalACAdd_TC[k],"Exogam/Clover_ECalACAdd_TC"); //AddBack + AC + prompt /clover + MySpectraList->AddSpectrum(fExogam2->fMyHistoCloverECalACAdd_TQ[k],"Exogam/Clover_ECalACAddDC_TQ");//AddBack + AC /clover MySpectraList->AddSpectrum(fExogam2->fMyHistoCloverECalACAddRejectF[k],"Exogam/Clover_ECalACAddRejF"); MySpectraList->AddSpectrum(fExogam2->fMyHistoCloverTCal[k],"Exogam/Clover_TCal"); @@ -227,8 +227,14 @@ void GUser::InitUser() MySpectraList->AddSpectrum(fExogam2->fMyHistoGOCCENet,"Exogam/PSA") ; MySpectraList->AddSpectrum(fExogam2->fMyHistoGOCCEMirror,"Exogam/PSA") ; + MySpectraList->AddSpectrum(fExogam2->fMyHistoRMirror,"Exogam/PSA") ; MySpectraList->AddSpectrum(fExogam2->fMyHistoPhiMirror,"Exogam/PSA") ; - MySpectraList->AddSpectrum(fExogam2->fMyHistoSumECCE,"Exogam/Sum"); + MySpectraList->AddSpectrum(fExogam2->fMyHistoPSASurface,"Exogam/PSA") ; + MySpectraList->AddSpectrum(fExogam2->fMyHistoPSASurfaceCarte,"Exogam/PSA") ; + MySpectraList->AddSpectrum(fExogam2->ShortTrace,"Exogam/PSA") ; + MySpectraList->AddSpectrum(fExogam2->fMyHistoPSAChi2,"Exogam/PSA") ; + MySpectraList->AddSpectrum(fExogam2->fMyHistoPSAChi2_Radius,"Exogam/PSA") ; + MySpectraList->AddSpectrum(fExogam2->fMyHistoSumECCE,"Exogam/Sum"); //sumCore MySpectraList->AddSpectrum(fExogam2->fMyHistoSumECCT,"Exogam/Sum"); MySpectraList->AddSpectrum(fExogam2->fMyHistoSumGOCCEE,"Exogam/Sum"); @@ -239,7 +245,7 @@ void GUser::InitUser() MySpectraList->AddSpectrum(fExogam2->fMyHistoPatternGOCCEE,"Exogam/Exogam_Pattern"); MySpectraList->AddSpectrum(fExogam2->fMyHistoPatternGOCCET,"Exogam/Exogam_Pattern"); MySpectraList->AddSpectrum(fExogam2->fMyHistoECCcopy_val,"Exogam"); - MySpectraList->AddSpectrum(fExogam2->fMyHistoSumExogam2,"Exogam/Sum"); + MySpectraList->AddSpectrum(fExogam2->fMyHistoSumExogam2,"Exogam/Sum"); //AddBack + AC rejected MySpectraList->AddSpectrum(fExogam2->fMyHistoSumExogam2DC,"Exogam/Sum"); MySpectraList->AddSpectrum(fExogam2->fMyHistoSumExogam2FoldCond,"Exogam/Sum"); MySpectraList->AddSpectrum(fExogam2->fMyHistoSumExogam2DCFoldCond,"Exogam/Sum"); diff --git a/ListRun.txt b/ListRun.txt index 208d56e..280f0fb 100644 --- a/ListRun.txt +++ b/ListRun.txt @@ -11,4 +11,5 @@ #exogamwithmirror #/data/exogamX/e826/acquisition/run/run_0041.dat.08-02-22_14h17m46s #exogamparisfull -/data/e826X/e826/acquisition/run/run_0072.dat.25-02-22_12h07m58s +#/data/e826X/e826/acquisition/run/run_0072.dat.25-02-22_12h07m58s +/data/e826X/e826/acquisition/run/run_0075.dat.25-02-22_17h20m44s diff --git a/TExogam2.cxx b/TExogam2.cxx index f4c1a26..3f12db8 100644 --- a/TExogam2.cxx +++ b/TExogam2.cxx @@ -16,6 +16,12 @@ TExogam2::TExogam2(bool bspec) Goccetrack=GOCCEActive=ESSActive=false; LUTBool=false; PrevTS=0; + + + trace = new TF1("trace","[0]/(1.+exp((x-[1])/[2]))",-1000,1000); //wood-saxon like traces + traceExp = new TGraph(6); + + } @@ -167,7 +173,7 @@ if(BoolSpec){ HListExogam2.Add(fMyHistoECCECal[k][l-1]); sprintf(title,"ECC%d_%c_TCal",k,cristal[l-1]); - fMyHistoECCTCal[k][l-1]= new TH1F(title,title,4000,0,16000); + fMyHistoECCTCal[k][l-1]= new TH1F(title,title,4000,0,80000); //HListExogam2.Add(fMyHistoECCTCal[k][l-1]); sprintf(title,"ECC%d_%c_T30",k,cristal[l-1]); @@ -228,24 +234,34 @@ if(BoolSpec){ } } - fMyHistoSumECCE= new TH1F("SumEnergyCoreExogam2","SumEnergyCoreExogam2",4000,0,2000); + fMyHistoSumECCE= new TH1F("fMyHistoSumECCE","fMyHistoSumECCE",4000,0,2000); HListExogam2.Add(fMyHistoSumECCE); - fMyHistoSumECCT= new TH1F("SumTimeCoreExogam2","SumTimeCoreExogam2",4000,0,2000); + fMyHistoSumECCT= new TH1F("fMyHistoSumECCT","fMyHistoSumECCT",4000,0,2000); HListExogam2.Add(fMyHistoSumECCT); - fMyHistoSumGOCCEE= new TH1F("SumEnergySegExogam2","SumEnergySegExogam2",70000,0,70000); + fMyHistoSumGOCCEE= new TH1F("fMyHistoSumGOCCEE","fMyHistoSumGOCCEE",70000,0,70000); HListExogam2.Add(fMyHistoSumGOCCEE); - fMyHistoSumGOCCET= new TH1F("SumTimeSegExogam2","SumTimeSegExogam2",4000,0,2000); + fMyHistoSumGOCCET= new TH1F("fMyHistoSumGOCCET","fMyHistoSumGOCCET",4000,0,2000); HListExogam2.Add(fMyHistoSumGOCCET); fMyHistoGOCCENet= new TH1F("fMyHistoGOCCENet","fMyHistoGOCCENet",70000,0,70000); fMyHistoGOCCEMirror = new TH1F("fMyHistoGOCCEMirror","fMyHistoGOCCEMirror",70000,-35000,35000); - fMyHistoPhiMirror = new TH1F("fMyHistoPhiMirror","fMyHistoPhiMirror",1000,-200,200); + fMyHistoPhiMirror = new TH1F("fMyHistoPhiMirror","fMyHistoPhiMirror",400,0,400); + fMyHistoRMirror= new TH1F("fMyHistoRMirror","fMyHistoRMirror",100,0,100); + fMyHistoPSASurface= new TH2F("fMyHistoPSASurface","fMyHistoPSASurface",200,0,2000,1000,-200,200); + fMyHistoPSASurfaceCarte= new TH2F("fMyHistoPSASurfaceCarte","fMyHistoPSASurfaceCarte",200,-100,100,200,-100,100); + ShortTrace= new TGraph(6); + fMyHistoPSAChi2 = new TH1F("fMyHistoPSAChi2","fMyHistoPSAChi2",7000,0,700); + fMyHistoPSAChi2_Radius= new TH2F("fMyHistoPSAChi2_Radius","fMyHistoPSAChi2_Radius",7000,0,700,2000,0,1000); HListExogam2.Add(fMyHistoGOCCENet); HListExogam2.Add(fMyHistoGOCCEMirror); HListExogam2.Add(fMyHistoPhiMirror); + HListExogam2.Add(fMyHistoRMirror); + HListExogam2.Add(fMyHistoPSASurfaceCarte); + HListExogam2.Add(fMyHistoPSAChi2); + fMyHistoPatternECCE= new TH1F("PatternEnergyCoreExogam2","PatternEnergyCoreExogam2",200,0,200); HListExogam2.Add(fMyHistoPatternECCE); @@ -260,7 +276,7 @@ if(BoolSpec){ - fMyHistoSumExogam2= new TH1F("Exogam2AddB_AC_noDC","Exogam2AddB_AC_noDC",4000,0,2000); + fMyHistoSumExogam2= new TH1F("Exogam2AddB_AC_noDC","Exogam2AddB_AC_noDC",4000,0,2000);//AddBack + AC rejected HListExogam2.Add(fMyHistoSumExogam2); fMyHistoSumExogam2FoldCond= new TH1F("Exogam2AddB_AC_noDC_Fold1","Exogam2AddB_AC_noDC_Fold1",4000,0,4000); HListExogam2.Add(fMyHistoSumExogam2FoldCond); @@ -604,6 +620,9 @@ bool TExogam2::IsMFMExo(MFMExogamFrame *frame) double valf,valf2,valf3; bool result = false; bool debug = false; + //---------------PSA control + bool PSA_debug = false; + int EXO2BoardId, EXO2CrysId, MapFinger,MulNetCharge ; int statusSegment, binstatus; float s[4]={0.,0.,0.,0.}; @@ -613,11 +632,24 @@ bool TExogam2::IsMFMExo(MFMExogamFrame *frame) int q1,q2; float PSA_phi; float T30,T60,T90,PSA_r; - float I1,I2,I3; + TVector2 PSAHit(0,0); + float psa_T[6] = {0,0,0,0,0,0}; + float psa_Q[6] = {0,0,0,0,0,0}; + float psa_TD1[5] = {0,0,0,0,0}; + float psa_QD1[5] = {0,0,0,0,0}; + float psa_TD2[4] = {0,0,0,0}; + float psa_QD2[4] = {0,0,0,0}; + float QMAX, TMAX,chi2,Xp,Yp, Rp,ThetaP; + int Method=2; + float PSACutOFF=160.; + + //---------------PSA control //cout<<frame->GetTimeStamp()<<endl; clo=cri=MapFinger=-100; T30=T60=T90=PSA_r=PSA_phi=0; + QMAX= TMAX = -1e3; + if(LUTBool==false){ printf("\033[31m Error in TExogam2::IsMFMExo => The Look Up Table is not known: I won't be able to unpack the event \033[m \n"); } @@ -769,25 +801,24 @@ bool TExogam2::IsMFMExo(MFMExogamFrame *frame) MaxSeg[clo][cri]=seg; } }//end Loop Segement - /*if(MulNetCharge==1){ //PSA Studies - cout<<""<<endl; - cout<<"PSA Analysis || Single interaction only"<<endl; - printf("(%d)%f --- (%d)%f \n",psa[0],s[0],psa[1],s[1]); - printf("--- %f ---\n",valf); - printf("(%d)%f --- (%d)%f \n",psa[3],s[3],psa[2],s[2]); - cout<<"----------------------"<<endl; + if(MulNetCharge==1&&valf>100){ //PSA Studies + if(PSA_debug)cout<<""<<endl; + if(PSA_debug)cout<<"======================================="<<endl; + if(PSA_debug)cout<<"PSA Analysis || Single interaction only"<<endl; + if(PSA_debug)printf("(%d)%f --- (%d)%f \n",psa[0],s[0],psa[1],s[1]); + if(PSA_debug)printf("--- %f ---\n",valf); + if(PSA_debug)printf("(%d)%f --- (%d)%f \n",psa[3],s[3],psa[2],s[2]); + if(PSA_debug)cout<<"----------------------"<<endl; for(Int_t search = 0 ; search<4 ; search++){ if(psa[search]==0){ - PSANetcharge=search; + PSANetcharge=search; // search for the next charge of the event break; } } if(PSANetcharge==0){ q1=1; q2=3; - - } else if(PSANetcharge==3){ q1=0; @@ -799,19 +830,111 @@ bool TExogam2::IsMFMExo(MFMExogamFrame *frame) } PSA_phi=TMath::Log10(abs(s[q2])/abs(s[q1])); - cout<<"Phi " <<PSA_phi<<endl; - fMyHistoPhiMirror->Fill(0.26*PSA_phi*TMath::RadToDeg()+7.3); + PSA_phi=45.+(0.26*PSA_phi*TMath::RadToDeg()+10.); // in Deg 7.3 + + + + if(PSA_debug)cout<<"Phi " <<PSA_phi<<endl; + + psa_T[0]=Cal(T30,0.,-10.,0); + psa_T[1]= 0.; + psa_T[2]=-1.0*psa_T[0]; + psa_T[3]=Cal(T60,0.,10.,0); + psa_T[4]=Cal(T90,0.,10.,0); + psa_T[5]=psa_T[4]+400.; + + psa_Q[0]=0; + psa_Q[1]=0.; + psa_Q[2]=30.; + psa_Q[3]=60.; + psa_Q[4]=90.; + psa_Q[5]=100.; + if(PSA_debug)cout<<"Input Trace"<<endl; + for(Int_t psaStep = 0 ; psaStep<6; psaStep++){ + if(PSA_debug)cout<<psa_T[psaStep]<<" "<<psa_Q[psaStep]<<endl; + traceExp->SetPoint(psaStep,psa_T[psaStep],psa_Q[psaStep]); + } + + + if(Method==1){ + for(Int_t psaStep = 0 ; psaStep<5; psaStep++){psa_TD1[psaStep]=psa_T[psaStep+1];} + for(Int_t psaStep = 0 ; psaStep<5; psaStep++){psa_QD1[psaStep]=(psa_Q[psaStep+1]-psa_Q[psaStep])/(psa_T[psaStep+1]-psa_T[psaStep]);} + + for(Int_t psaStep = 0 ; psaStep<4; psaStep++){psa_TD2[psaStep]=psa_TD1[psaStep+1];} + for(Int_t psaStep = 0 ; psaStep<4; psaStep++){psa_QD2[psaStep]=(psa_QD1[psaStep+1]-psa_QD1[psaStep])/(psa_TD1[psaStep+1]-psa_TD1[psaStep]);} + + + for(Int_t psaStep = 0 ; psaStep<4; psaStep++){ + if(PSA_debug)cout<<" Time " << psa_TD2[psaStep] << " Charge "<< psa_QD2[psaStep]<<endl; + if(psa_QD2[psaStep]>QMAX){ + QMAX=psa_QD2[psaStep]; + TMAX=psa_TD2[psaStep]; + } + } + chi2=1; + + } + else if (Method==2){ + trace->SetParameter(0,100); + trace->SetParameter(1,100) ; + trace->SetParameter(2,-300); + for(Int_t trial = 0 ; trial < 5; trial++){ + traceExp->Fit("trace","Q"); + } + if(PSA_debug)cout<<"Chi2 is "<<trace->GetChisquare()<<endl; + + chi2=trace->GetChisquare(); + for(Int_t trial = psa_T[0] ; trial <psa_T[5] ; trial++){ + if(trace->Derivative2(trial)>QMAX){ + QMAX=trace->Derivative2(trial); + TMAX=1.*trial; + } + } + + + } + if(PSA_debug)cout<<"Max is "<<QMAX<<" at "<<TMAX<<endl; + + if(chi2<PSACutOFF){ //these are good traces + PSA_r=TMAX*0.05+0.0; + PSAHit.SetMagPhi(PSA_r,PSA_phi*TMath::DegToRad()); + //cout<<PSAHit.Phi()*TMath::RadToDeg()<<endl; + //cout<<"then rotate by "<<1.*PSANetcharge*(90.*TMath::DegToRad())<<endl; + + //PSAHit.Rotate((double)(PSANetcharge*90.*TMath::RadToDeg())); + Xp=PSAHit.X()*TMath::Cos(PSANetcharge*90.*TMath::RadToDeg())-PSAHit.Y()*TMath::Sin(PSANetcharge*90.*TMath::RadToDeg()); + Yp=PSAHit.X()*TMath::Sin(PSANetcharge*90.*TMath::RadToDeg())+PSAHit.Y()*TMath::Cos(PSANetcharge*90.*TMath::RadToDeg()); + Rp=sqrt(Xp*Xp+Yp*Yp); + + if(Xp>0&&Yp>=0)ThetaP=TMath::ATan(Yp/Xp); + if(Xp>0&&Yp<0)ThetaP=TMath::ATan(Yp/Xp)+2*TMath::Pi(); + if(Xp<0)ThetaP=TMath::ATan(Yp/Xp)+TMath::Pi(); + if(Xp==0&&Yp>0)ThetaP=TMath::Pi()/2.; + if(Xp==0&&Yp<0)ThetaP=3*TMath::Pi()/2.; + PSAHit.SetMagPhi(Rp,ThetaP); + + //cout<<PSAHit.Phi()*TMath::RadToDeg()<<endl; + if(BoolSpec)fMyHistoPhiMirror->Fill(PSAHit.Phi()*TMath::RadToDeg());// in Deg + + if(BoolSpec)fMyHistoRMirror->Fill(PSA_r); + if(BoolSpec)fMyHistoPSASurface->Fill(PSA_r,PSAHit.Phi()*TMath::RadToDeg()); + if(BoolSpec)fMyHistoPSAChi2_Radius->Fill(chi2,PSA_r); + + if(BoolSpec)fMyHistoPSAChi2->Fill(chi2); + if(BoolSpec)fMyHistoPSASurfaceCarte->Fill(PSAHit.X(),PSAHit.Y()); + - I1=(60.-30.)/(1.*T60-T30); - I2=(90.-60.)/(1.*T90-T60); - I3=(I2-I1)/(1.*T90-T60); - cout<<"I1 " <<I1<<" I2 "<<I2 <<endl; - }*/ + for(Int_t psaStep = 0 ; psaStep<6; psaStep++){ + if(PSA_debug)cout<<psaStep<<"---- psa_T / psa_Q "<<psa_T[psaStep]<< "/" <<psa_Q[psaStep]<<endl; + ShortTrace->SetPoint(psaStep,psa_T[psaStep],psa_Q[psaStep]); + } + } + } //------------------Now Anti Comption UShort_t sum = frame->ExoGetBGO()+frame->ExoGetCsi(); //do a sum of CsI+BGO energies - if(sum>10){ + if(sum>150){ NoComptonCore[clo][cri]=false; NoCompton[clo]=false; } @@ -841,6 +964,7 @@ float Theta_Gamma, Phi_Gamma; bool IsPrompt[16][4]; float SumCalorimeter; + SumCalorimeter=0; //------------------Time Treat for(Int_t c=0;c<16;c++){ diff --git a/TExogam2.h b/TExogam2.h index f3695a8..c089bd5 100644 --- a/TExogam2.h +++ b/TExogam2.h @@ -14,11 +14,13 @@ #include <MFMExogamFrame.h> #include "TVector3.h" +#include "TVector2.h" #include "TF1.h" #include "TTree.h" #include "TH1.h" #include "TH2.h" #include "TMath.h" +#include "TGraph.h" #include <TObject.h> #include "TRandom.h" #include "TString.h" @@ -76,7 +78,17 @@ class TExogam2 : public TDetector { TH1F * fMyHistoGOCCENet ; TH1F * fMyHistoGOCCEMirror ; TH1F * fMyHistoPhiMirror ; - + TH1F * fMyHistoRMirror ; + TH2F * fMyHistoPSASurface ; + TH2F * fMyHistoPSASurfaceCarte ; + TGraph *ShortTrace; + TF1 *trace; + TGraph *traceExp; + + + TH1F * fMyHistoPSAChi2 ; + TH2F * fMyHistoPSAChi2_Radius ; + TH1F * fMyHistoESS_BGO[16][4]; TH1F * fMyHistoESS_CSI[16][4]; diff --git a/Utils/files.h b/Utils/files.h new file mode 100755 index 0000000..f8fa62b --- /dev/null +++ b/Utils/files.h @@ -0,0 +1,266 @@ +#ifndef FILES_H +#define FILES_H 1 + +#define matsize 4096 +#define io_read 0 +#define io_write 1 + + +class files{ + int file_id; + char filename[80]; + char text[100]; + int lum; + FILE *fp; + int fd; +public: + char EUROGAM_NAME[80]; + files(); + files(const char*); + struct ganil_header{ + unsigned long num_run; // ! numero run (a la sauvegarde) + char reserve_1[12]; // ! + char nom_run[16]; // ! nom run (facultatif, 15 car utiles) + long int num_spectre; // ! numero spectre + char type_spectre[2]; // ! type ("1D" ou "2D") + char reserve_2[10]; // ! + char nom_spectre[16]; // ! nom du spectre (15 car utiles) + char date[12]; // ! date de creation ("jj-mmm-aaaa") + char heure[8]; // ! heure de creation ("hh:mn:ss") + long int nat_spectre; // ! reserve ulterieure (=0) + unsigned long codeur_x; // ! val max du codeur en x + unsigned long codeur_y; // ! val max du codeur en y + unsigned long taille_canal; // ! taille utile par canal (16 ou 32) + char type_canal[4]; // ! type variable ("I*4" , "I*2") + unsigned long dim_x; // ! dimension du spectre en x + unsigned long dim_y; // ! dimension du spectre en y + unsigned long min_x; // ! numero du canal min en x + unsigned long min_y; // ! numero du canal min en y + unsigned long max_x; // ! numero du canal max en x + unsigned long max_y; // ! numero du canal max en y + char commentaire[80]; // ! commentaire utilisateur + char nom_par_x[16]; // ! nom du parametre x (15 car utiles) + char nom_par_y[16]; // ! nom du parametre y (15 car utiles) + char unite_x[8]; // ! unite en x (8 car utiles) + char unite_y[8]; // ! unite en y (8 car utiles) + }header_ganil; + + struct header_ans{ + char revision_code[2]; //0-1 + char file_name[12]; //2-13 + char spectrum_id[72]; //14-85 + char Start_Date[8]; //86-93 + char Stop_Date[8]; //94-101 + char ElapsedRT[8]; //102-109 + char ElapsedLT[8]; //110-117 + char ElapsedPass[4]; //118-121 + char DeadTime[4]; //122-125 + char Hard_Setup_AMP[42]; //126-167 + char Hard_Setup_ADC[84]; //168-251 + char Hard_Setup_Bias[30]; //252-281 + char Ener_Calib_Data[32]; //282-313 + char Shape_Calib_Data[24]; //314-337 + char Eff_Calib_Data[48]; //338-385 + char Detector[208]; //386-593 + char Hardware_spec[24]; //594-617 + char Hardware_setup_Presets[20]; // 618-637 + char Tool_Settings[28]; //638-665 + char Background[24]; // 666-689 + char Microanalysis[48]; // 690-737 + char Oxford[10]; // 738-747 + char Sample[20]; // 748-767 + char More_Tools[20]; // 768-787 + char Reserved[226]; // 788-1013 + char SpecStart[2]; + char SpecEnd[2]; + char NROIs[2]; + char AcqSysType[2]; + char AcqSysLen[2]; + }header_ans; + + struct in2p3_header{ + char nomrun[16]; + int numrun; + char nomspe[16]; + int nuspe; + char date[20]; + int type; + int format; + int nbcanx; + int candebx; + int nbcany; + int candeby; + int nbcanz; + int candebz; + int nbcant; + int candebt; + char oct[4]; + char idaplic[8]; + int hlong; + char applic[16]; + char version[8]; + }header; + + struct header_eurogam + { + unsigned int magic_number; + unsigned int version; // expect 1 !!! + char spectrum_name[32]; // spectrum name + unsigned int fold; + char creation_date[20]; //creation date + char modification_date[20]; // modif date + + unsigned int base_info[8]; // base info for dim 1-8 + + unsigned int range[8]; // range info for dim 1-8 + + unsigned int fip[32]; // information pointer + int anotation_pointer[8]; + int calibration_pointer[8]; + int efficiency_pointer[8]; + unsigned int data_array_descriptor1[5]; + // 32 bits : array layout (0 for histo/matrix) + // 32 bits : array type (5 for 32 bit signed ) + // 32 bits : reserved for future + // 32 bits : reserved for future + // 32 bits : pointer + unsigned int data_array_descriptor2[5]; + int base_address_string_space; + int string_free_space; + unsigned int top_string_space; + unsigned int base_address_count_space; + unsigned int count_free_space; + unsigned int top_count_space; + unsigned int unused[20]; // not used ... + }header_eurogam; + + void check_little_endian(void); + unsigned long swap(unsigned long); + void swap4b(char *); + void swap2b(char *); + int open_file(void); + int open_file_r(void); + int open_file_r(char *); + int fopen_file(void); + void get_name(const char *); + int is_file_here(void); + int is_file_here(char *); + void remove(void); + void remove(char *); + void touch(void); + void put_ex_mat(); + void put_ex_mat(char *); + void put_ex_spe(); + void put_ex_spe(char *); + void put_ex_txt(char *); + void put_ex_ans(char *); + void put_ex_asc(char *); + void put_ex_s(); + void put_ex_s(char *); + void put_ex_mtr(); + int read_line(FILE *, char *); + void specdump(short *, int, FILE*, FILE*); + void specdump(int *, int, FILE*, FILE*); + void specdump(unsigned int *, int, FILE*, FILE*); + void specdump(float *, int, FILE*, FILE*); + void specdump(int **, int, int, FILE*, FILE *); + void specdump(short **, int, int, FILE*, FILE *); +// for radware .mat matrices + int write_mat_rad(short *, FILE *, FILE *); + int write_mat_rad(short *, char *, FILE *, FILE *); + void write_mat_rad(int *); + int read_mat_rad(short *, FILE *, FILE *); + int read_mat_rad(short *, char *, FILE *, FILE *); +// for mktri matrices format + int read_mktri(short *, int); + int write_mktri(short *, int); + int check_mat(int, int*, FILE*, FILE* ); + int check_mat(int, FILE*, FILE* ); +// for in2p3 format + int read_header_in2p3(); + void write_header_in2p3(FILE *); + int read_sp_in2p3(unsigned int *); + int read_sp_in2p3(unsigned int **); + int get_type_in2p3(){return(header.type);}; + int get_nx_in2p3(){return(header.nbcanx);}; + int get_ny_in2p3(){return(header.nbcany);}; + char* get_nom_in2p3(){return(header.nomspe);}; +// for gpsi format + int get_nsp_gpsi(char *); + int get_nx_gpsi(int, char *); + int get_ny_gpsi(int, char *); + void myrgspe(char *, int, float *,int , int, char *, int); + void myrgspe(FILE *,char *, int, float *,int , int, char *, int); +// for cambda format + int get_size_cambda(char *); + void get_cambda(char *, float *, int); + void get_att_mtr(void); + int read_mtr(float **); +// for ascii format + int get_size_ascii(char *); + void get_ascii(char *, float *, int); + void write_tab(float *, int); + void write_tab(int *, int); +// for eurogam format + int swaping_eurogam; + int open_eurogam(char *); + void close_eurogam(void); + int get_parameters_eurogam(char *, int *, int *, int *, FILE *, FILE *); + int get_header_eurogam(char *, FILE *, FILE *); + int get_header_eurogam(char *); + void print_header_eurogam(void); + int check_magicnumber_eurogam(char *, FILE *, FILE *); + int check_magicnumber_eurogam(char *); + void swap_header_eurogam(void); + + int get_fold_eurogam(void){return header_eurogam.fold;}; + int get_size_eurogam(void){return header_eurogam.count_free_space;}; + int get_size1_eurogam(void){return header_eurogam.range[0];}; + int get_size2_eurogam(void){return header_eurogam.range[1];}; + int get_type_eurogam(void){return + header_eurogam.data_array_descriptor1[1];}; + int get_tab1D_eurogam(unsigned char *); + int get_tab1D_eurogam(char *); + int get_tab1D_eurogam(unsigned short *); + int get_tab1D_eurogam(short *); + int get_tab1D_eurogam(unsigned int *); + int get_tab1D_eurogam(float *); + int get_tab1D_eurogam(int *); +// int get_tab2D_eurogam(short *); + int get_tab2D_eurogam(short *, int, int); + int get_tab2D_eurogam(short **, int, int); +// int get_tab2D_eurogam(int *, int); + int get_tab2D_eurogam(int *, int, int); + int get_tab2D_eurogam(int **, int, int); + int init_header_eg(int, int , const char *, int, FILE *, FILE *); + int write_eg(int*, int, int , const char *, FILE *, FILE *); + int write_eg(int*, int, int , const char *); + int write_eg(int**, int, int , const char *, FILE *, FILE *); + int write_eg(unsigned int*, int, int , const char *, FILE *, FILE *); + int write_eg(short** , int, int , const char *, FILE *, FILE *); + int write_eg(float*, int, int , const char *, FILE *, FILE *); +// for ganil format + int get_header_ganil(char *); + void print_header_ganil(void); + int get_dimx_ganil(void){return swap(header_ganil.dim_x);}; + int get_ganil_integer4(unsigned long *); +// for radware monodim format + int write_spe(char *, float *, int, FILE *, FILE *); + int read_spe(float *, char *, int *); + int read_spe(char *,float *, char *, int *, FILE *, FILE *); +// for xmgr + int tab_to_xmgr(int, float*, float*, float*); + void write_xmgr(int, float *, float *); +// for ans format + int get_header_ans(char *); + int open_ans(char *); + void close_ans(void); + void print_header_ans(void); + int get_size_ans(); + int read_sp_ans(float *); +// for asc format + int read_header_asc(char *); + void read_asc(float *, char *, int); +}; + +#endif diff --git a/Utils/psa.txt b/Utils/psa.txt new file mode 100644 index 0000000..5864378 --- /dev/null +++ b/Utils/psa.txt @@ -0,0 +1,6 @@ +-147.197 0 +0 0 +147.197 30 +279.857 60 +484.151 90 +884.151 100 diff --git a/Utils/root2spe b/Utils/root2spe new file mode 100755 index 0000000000000000000000000000000000000000..1f7b2605c3276f66172204faeecadd5a36693c70 GIT binary patch literal 35915 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 ZA9gi<uKu6KqKw-;Bt(N%CT6m^`(HQG4k7>m literal 0 HcmV?d00001 diff --git a/Utils/root2spe.C b/Utils/root2spe.C new file mode 100755 index 0000000..18fed1e --- /dev/null +++ b/Utils/root2spe.C @@ -0,0 +1,264 @@ +#include <string.h> +#include <stdio.h> +#include <iostream> +#include <fstream> +#include <stdlib.h> +#include <math.h> +#include <time.h> +#include <ctype.h> +#include "TStyle.h" +#include "TCanvas.h" +#include "TGraph.h" +#include "TH2F.h" +#include "TChain.h" +#include "TTree.h" +#include "TNtuple.h" +#include "TFile.h" +#include "TRandom.h" +#include "TVector3.h" +#include "TRotation.h" +#include "TLorentzVector.h" +#include "TGenPhaseSpace.h" +#include "TMath.h" +#include "TRint.h" +#include "TString.h" +#include "TKey.h" +#include "files.h" + +/* root2spe spectrum converter root->spe + 1D histograms only + Ch. Theisen + First Version : Feb 2005 + + compile with : +g++ root2spe.C -o root2spe `$ROOTSYS/bin/root-config --libs` `$ROOTSYS/bin/root-config --cflags` +*/ + + +class files File; + +files::files(){ + + strcpy(EUROGAM_NAME,"Eurogam spectrum"); + +} + +files::files(const char *fname){ + + strcpy(EUROGAM_NAME,fname); + +} +int files::is_file_here(char *file){ +FILE *fpa; + + fpa = fopen(file,"r"); + if (fpa == NULL) return(0); + fclose(fpa); + return(1); +} + +void files::swap4b(char *buf){ +char c; + + c = buf[3]; buf[3] = buf[0]; buf[0] = c; + c = buf[2]; buf[2] = buf[1]; buf[1] = c; + +} + +int files::write_spe(char *file, float *spectre, int size, // output name , spectra array[nbin], nbin, + FILE *stream1, FILE *stream2){ +FILE *fprad; +int dum; +int j = 24; +int toto; +int tab[4] = {0,1,1,1}; +int i; +float *newspec; +int newsize; + + + newsize = size; + if (size > 16384){ + newsize=16384; + printf("Initial size = %d; resizing to %d \n",size,newsize); + } + + tab[0] = newsize; + toto = newsize * sizeof(float); + + fprad = fopen(file,"w"); + if (fprad == NULL){ + fprintf(stream1,"Cannot write %s \n",file); + if (stream2) + fprintf(stream2,"Cannot write %s \n",file); + fclose(fprad); + return(0); + } + if (LITTLE_ENDIAN == 1){ + swap4b((char*)&j); + for(i=0; i<4; i++) + swap4b((char*)&(tab[i])); + swap4b((char*)&toto); + newspec = new float[newsize]; + for(i=0; i<newsize; i++){ + + newspec[i] = spectre[i]; + swap4b((char*)&(newspec[i])); + } + } + + dum = fwrite(&j, sizeof(int), 1, fprad); + dum = fwrite(filename, 8, 1, fprad); + dum = fwrite(tab, sizeof(int), 4, fprad); + dum = fwrite(&j, sizeof(int), 1, fprad); + + dum = fwrite(&toto, sizeof(int), 1, fprad); + if (LITTLE_ENDIAN == 1){ + dum = fwrite(newspec, sizeof(float), newsize, fprad); + delete [] newspec; + } + else + dum = fwrite(spectre, sizeof(float), newsize, fprad); + + dum = fwrite(&toto,sizeof(int),1,fprad); + if (fprad == NULL){ + fprintf(stream1,"Cannot write %s \n",file); + if (stream2) + fprintf(stream2,"Cannot write %s \n",file); + + fclose(fprad); + return(0); + } + fclose(fprad); + + return(1); +} + + +void files::put_ex_spe(char *name){ +int len; + len = strlen(name); + if ( ( name[len-1] == 'e' ) && + ( name[len-2] == 'p' ) && + ( name[len-3] == 's' ) && + ( name[len-4] == '.' ) ) return; + sprintf(name,"%s.spe",name); +} +int process(TH1F *histo, int option){ +char name[80]; +char radname[80]; +char type[80]; +int nx,ny; +int binning,range,start; +float *spec; +float ch,st; +int i,j; + + sprintf(name,histo->GetName()); + printf("processing %s ...\n",name); + sprintf(type,histo->ClassName()); + if (strncmp(type,"TH1",3) != 0){ + printf(" %s is not a TH1 \n",name); + return(1); + } + + nx = histo->GetNbinsX(); + ny = histo->GetNbinsY(); + printf(" Nombre de bins X : %d \n",nx); + printf(" Nombre de bins Y : %d \n",ny); + printf(" First bin : %f \n",histo->GetBinLowEdge(1)); + printf(" Last bin : %f \n",histo->GetBinLowEdge(nx)); + + spec = new float[nx]; + for(i=1; i<=nx; i++){ + ch = histo->GetBinLowEdge(i); + st = histo->GetBinContent(i); + //printf("%d %f %f \n",i,ch,st); + spec[i-1] = histo->GetBinContent(i); + } + + + + switch(option){ + case 1: + sprintf(radname,name); + File.put_ex_spe(radname); + printf(" writing %s \n",radname); + break; + case 2: + printf("Enter output .spe filename : "); + scanf("%s",radname); + File.put_ex_spe(radname); + break; + } + + File.write_spe(radname, spec, nx, stdout, NULL); // output name , spectra array[nbin], nbin, + delete [] spec; + return(1); +} + +int main(int argc, char *argv[]){ +int mode; // 1 for only one 2 for all +int dum; +char file[80]; +char specname[80]; +TH1F *histo; + + printf("--------------------------------------------------- \n"); + printf(" root2spe : a program to convert root spectrum \n"); + printf(" to Radford spectrum format \n"); + printf(" use root2spe -all to convert all histos \n"); + printf("--------------------------------------------------- \n"); + + if (argc == 1){ + mode = 1; + } + else{ + dum = strcmp(argv[1],"-all"); + if (dum != 0){ + printf("unvalid option %s \n",argv[1]); + exit(0); + } + mode = 2; + } + + printf("root file : "); + scanf("%s",file); + + if (!File.is_file_here(file)){ + printf("This file does not exists ...\n"); + exit(0); + } + + + TFile *file1 = new TFile(file); + if (file1->IsZombie()){ + printf("%s is not a root file ... \n",file); + exit(0); + } + + switch(mode){ + case 1: + file1->ls(); + printf("histogram name : "); + scanf("%s",specname); + + histo = (TH1F*)file1->Get(specname); + if (histo == NULL){ + printf("Error : %s does not exist... \n",specname); + exit(0); + } + process(histo,2); + break; + case 2: + TIter nextkey(file1->GetListOfKeys()); + TKey *key; + while(key = (TKey*)nextkey()){ + TH1F *histo = (TH1F*)key->ReadObj(); + process(histo,1); + } + break; + } + file1->Close(); + +} -- GitLab