From d0bbe5940fbad13eff817e137431d1a6bf67e41d Mon Sep 17 00:00:00 2001 From: Vratislav Chudoba Date: Tue, 5 Mar 2024 13:13:36 +0300 Subject: [PATCH] New version of GNU make for ROOT version 6 (using rootcling instead of rootcint) created. Some text variables changed from char[] to TString to suppress warnings. --- AculData/AculCalibCsI.h | 4 +- AculData/AculCalibration.cpp | 187 ++++++++++++++++++----------------- AculData/AculCalibration.h | 14 +-- AculData/AculData.mk | 8 +- TELoss/TELoss.mk | 13 ++- load.cxx | 3 +- makefile | 26 +++-- 7 files changed, 135 insertions(+), 120 deletions(-) diff --git a/AculData/AculCalibCsI.h b/AculData/AculCalibCsI.h index c3a0add..492aaf3 100644 --- a/AculData/AculCalibCsI.h +++ b/AculData/AculCalibCsI.h @@ -44,8 +44,8 @@ private: Int_t nCuts; //number of cuts TClonesArray cutsCol; - TH1I *hfull[NOCALFILES][16]; - TH1I *hcut[NOCALFILES][16]; + TH1I *hfull[NOCALFILES][16]; //! + TH1I *hcut[NOCALFILES][16]; //! Int_t peakMin[NOCALFILES][16]; Int_t peakMax[NOCALFILES][16]; diff --git a/AculData/AculCalibration.cpp b/AculData/AculCalibration.cpp index 48f742d..617c487 100755 --- a/AculData/AculCalibration.cpp +++ b/AculData/AculCalibration.cpp @@ -23,11 +23,11 @@ AculCalibration::AculCalibration() : fEnergy(0), fEnergyInput(0), fA(0), fB(0), fCurrentHStack = NULL; fCurrentHistList.IsOwner(); -// todo: change size of fA and fB in some other place +// todo: change size of fA and fB in some other place fA.Set(32); - fB.Set(32); -// fEnergy.Set(4); -// fEnergyInput.Set(4); + fB.Set(32); +// fEnergy.Set(4); +// fEnergyInput.Set(4); kRaNOPEAKS = 0; fLowerPeakRelativeHight = 0.; @@ -171,7 +171,7 @@ Int_t AculCalibration::PeaksFitting(TH1* hSpectrum, Option_t* option, Double_t s if (peaksNumber != kRaNOPEAKS) { Info("PeaksFitting", "In histogram %s was found %d peaks", hSpectrum->GetName(), peaksNumber); return 1; - } + } //should be optional output Info("PeaksFitting", "Number of peaks in %s: %d", hSpectrum->GetName(), peaksNumber); @@ -258,7 +258,7 @@ Int_t AculCalibration::PeaksFitting(TH1* hSpectrum, Option_t* option, Double_t s TMath::Sort(peaksNumber, peak, j, kFALSE); fPeak.Set(peaksNumber); for (Int_t i = 0; i < peaksNumber; i++) { - fPeak[i] = peak[j[i]]; + fPeak[i] = peak[j[i]]; //printf("\tPeak peak\t%f\n", fPeak[i]); } @@ -267,23 +267,23 @@ Int_t AculCalibration::PeaksFitting(TH1* hSpectrum, Option_t* option, Double_t s for (Int_t i = 0; i < peaksNumber; i++) { printf("\tPeak position is\t%f\n", fPeak[i]); } - } - + } + // provest kontrolu pomerne polohy piku, // jestli jsou spatne, provest urcita opatreni, // napr. zapis daneho histogramu do souboru, // zapis do souboru s chybama, vypis na obrazovku, ... - for (Int_t i = 0; i < peaksNumber; i++) { + for (Int_t i = 0; i < peaksNumber; i++) { if ( !( (((1-fPeakPositionTolerance)*(fEnergy[0]/fEnergy[i])) < (fPeak[0]/fPeak[i])) && (((1+fPeakPositionTolerance)*(fEnergy[0]/fEnergy[i])) > (fPeak[0]/fPeak[i])) ) ) { - //printf("\tPeaksFitt fEnergy\t%f\n", fEnergy[i]); + //printf("\tPeaksFitt fEnergy\t%f\n", fEnergy[i]); if (fCalInformation /* && opt.Contains("writebad")*/) { fCalInformation->cd(); hSpectrum->Write(); } //return 2;*/ } - }//for - + }//for + return 0; } @@ -358,27 +358,27 @@ void AculCalibration::PrintInputParameters() return; -} - - +} + + Double_t AculCalibration::GetA(Int_t i) { - if (i >= fA.GetSize()) //if i >= number of array element + if (i >= fA.GetSize()) //if i >= number of array element { return 0.; } return fA[i]; -} - +} + Double_t AculCalibration::GetB(Int_t i) { - if (i >= fB.GetSize()) + if (i >= fB.GetSize()) { return 0.; } return fB[i]; -} - +} + Bool_t AculCalibration::SetCalibrationParameters(const char* calparfile) @@ -393,7 +393,7 @@ Bool_t AculCalibration::SetCalibrationParameters(const char* calparfile) char cA[40], cB[40], cC[40], cD[40]; //open file with calibration parameters - ifstream calFileR; + std::ifstream calFileR; calFileR.open(calparfile); @@ -439,10 +439,10 @@ void AculCalibration::ShowRawSpectra(const char* filename, const Int_t block, TC // xaxismax: maximal channel, which will be displayed // subaddress: - Char_t address[40]; - Char_t histName[40]; - Char_t fillCommand[40]; - Char_t fillCondition[40]; + TString address; + TString histName; + TString command; + TString condition; if (!rawCanvas) { @@ -453,11 +453,8 @@ void AculCalibration::ShowRawSpectra(const char* filename, const Int_t block, TC rawCanvas->Clear(); -// cout << "hovno" << endl; - rawCanvas->SetFillColor(10); -// cout << "hovno" << endl; TFile *fr = new TFile(filename); if (fr->IsOpen() == 0) { cout << endl << "File " << filename << " was not opened and won't be processed" << endl << endl; @@ -465,23 +462,21 @@ void AculCalibration::ShowRawSpectra(const char* filename, const Int_t block, TC } TH1I *hRead = 0; TTree *tr = (TTree*)fr->Get("RAW"); -// cout << "hovno" << endl; - if (subaddress > 15) { rawCanvas->Divide(4, 4); rawCanvas->SetFillColor(10); -// cout << "hovno" << endl; for (Int_t i = 0; i < 16; i++) { cout << i << endl; rawCanvas->cd(i+1); hRead = new TH1I("name", "title", 4096, 0, 4095); - sprintf(address, "C3[%d][%d]", block, i); - sprintf(histName, "H3[%d][%d]", block, i); + address.Form("C3[%d][%d]", block, i); + histName.Form("H3[%d][%d]", block, i); hRead->SetName(histName); - sprintf(fillCommand, "%s >> %s", address, hRead->GetName()); - sprintf(fillCondition, "%s > 0", address); - tr->Draw(fillCommand, fillCondition, ""); + command.Form("%s >> %s", address.Data(), hRead->GetName()); + // sprintf(fillCondition, "%s > 0", address); + condition.Form("%s > 0", address.Data()); + tr->Draw(command, condition, ""); if (hRead) { hRead->SetDirectory(0); // cout << hRead->GetEntries() << endl; @@ -496,13 +491,14 @@ void AculCalibration::ShowRawSpectra(const char* filename, const Int_t block, TC else { fr->cd(); hRead = new TH1I("name", "title", 4096, 0, 4095); - sprintf(address, "C3[%d][%d]", block, subaddress); - sprintf(histName, "H3[%d][%d]", block, subaddress); + address.Form("C3[%d][%d]", block, subaddress); + histName.Form("H3[%d][%d]", block, subaddress); hRead->SetName(histName); - sprintf(fillCommand, "%s >> %s", address, hRead->GetName()); - sprintf(fillCondition, "%s > 0", address); + command.Form("%s >> %s", address.Data(), hRead->GetName()); + // sprintf(fillCondition, "%s > 0", address); + condition.Form("%s > 0", address.Data()); // cout << fillCommand << setw(20) << fillCondition << endl; - tr->Draw(fillCommand, fillCondition, "goff"); + tr->Draw(command, condition, "goff"); if (hRead) { hRead->SetDirectory(0); // if (fHRawList) { @@ -621,11 +617,16 @@ void AculCalibration::FillRawSpectraFile(const char* rawdatafile, const char* bl return; } - char address[40]; - char histName[40]; - char histTitle[40]; - char fillCommand[40]; - char fillCondition[40]; + // char address[40]; + // char histName[40]; + // char histTitle[40]; + // char fillCommand[40]; + // char fillCondition[40]; + TString address; + TString histName; + TString histTitle; + TString command; + TString condition; fw.cd(); TH1I *hRead = 0; @@ -633,14 +634,16 @@ void AculCalibration::FillRawSpectraFile(const char* rawdatafile, const char* bl for (Int_t i = 0; i < 16; i++) { //zkontrolovat hranice cout << i << endl; //predelat na info hRead = new TH1I("name", "title", 4096, 0, 4095); - sprintf(address, "%s[%d]", block, i); - sprintf(histName, "%s[%d]", block, i); - sprintf(histTitle, "%s : %s", rawdatafile, histName); + address.Form("%s[%d]", block, i); + histName.Form("%s[%d]", block, i); + histTitle.Form("%s : %s", rawdatafile, histName.Data()); hRead->SetName(histName); hRead->SetTitle(histTitle); - sprintf(fillCommand, "%s >> %s", address, hRead->GetName()); - sprintf(fillCondition, "%s > 0", address); - tr->Draw(fillCommand, fillCondition, "goff"); //prozkoumat goff + // sprintf(fillCommand, "%s >> %s", address, hRead->GetName()); + command.Form("%s >> %s", address.Data(), hRead->GetName()); + // sprintf(fillCondition, "%s > 0", address); + condition.Form("%s > 0", address.Data()); + tr->Draw(command, condition, "goff"); //prozkoumat goff hRead->Write(); }//for @@ -679,7 +682,7 @@ Bool_t AculCalibration::CalculateCalibParameters(const char* inputfile, const ch else { oFileName.Form("%s[%d-%d].cal", block, lowersubaddress, uppersubaddress); } }//if - ofstream outcalfile; + std::ofstream outcalfile; outcalfile.open(oFileName.Data()); if (!outcalfile.is_open()) { Error("CalculateCalibParameters", "Output file %s was not opened", oFileName.Data()); @@ -783,7 +786,7 @@ Bool_t AculCalibration::CalculateCalibParameters(const char* inputfile, const ch //calibration parameters calculation //ok for (Int_t j = 0; j < kRaNOPEAKS; j++) { //delat podle poctu zkoumanych piku - calGraph->SetPoint(j, fPeak[j], fEnergy[j]); //calibration graph filling + calGraph->SetPoint(j, fPeak[j], fEnergy[j]); //calibration graph filling printf("\tPeak\t%f and energy\t%f\n", fPeak[j], fEnergy[j]); }//for calGraph->Fit(calFunction, "Q", "goff", 0, 4096); //omezit hlasitost fitovani, udelat volitelne, dodelat volby rozsahu @@ -1087,7 +1090,7 @@ void AculCalibration::FindEnergyPeaks(TCanvas *c1, const char* ifile, const char //creation of output text file with positions of peaks in MeV TString workFile = outfile; - ofstream ofile; + std::ofstream ofile; ofile.open(workFile.Data()); if (!ofile.is_open()) { Error("PeaksFitting", "Output file %s was not opened", workFile.Data()); @@ -1103,17 +1106,17 @@ void AculCalibration::FindEnergyPeaks(TCanvas *c1, const char* ifile, const char c1->cd(i+1); PeaksFitting(hWork); hWork->Draw(); - ofile<GetEntries()][kRaNOPEAKS]; - //TString hSumName; - Double_t hSumE1 = 0.; - Double_t hAvrE1 = 0.; - Double_t hSumE2 = 0.; - Double_t hAvrE2 = 0.; - Double_t hSumE3 = 0.; - Double_t hAvrE3 = 0.; - Double_t hSumE4 = 0.; + TH1 *hWork = 0; + Double_t hArray[histList->GetEntries()][kRaNOPEAKS]; + //TString hSumName; + Double_t hSumE1 = 0.; + Double_t hAvrE1 = 0.; + Double_t hSumE2 = 0.; + Double_t hAvrE2 = 0.; + Double_t hSumE3 = 0.; + Double_t hAvrE3 = 0.; + Double_t hSumE4 = 0.; Double_t hAvrE4 = 0.; // c1->Clear(); // c1->Divide(6, 6); - for (Int_t i = 0; i < histList->GetEntries(); i++) { + for (Int_t i = 0; i < histList->GetEntries(); i++) { fr->GetObject(histList->At(i)->GetName(), hWork); - PeaksFitting(hWork); - for(Int_t j = 0; j < kRaNOPEAKS; j++) { + PeaksFitting(hWork); + for(Int_t j = 0; j < kRaNOPEAKS; j++) { hArray[i][j] = fPeak[j]; - if(fPeak[j]==0.){ - Error("FindAverageEnergies", "No peak in channel %i !", histList->GetEntries()); - } + if(fPeak[j]==0.){ + Error("FindAverageEnergies", "No peak in channel %i !", histList->GetEntries()); + } //hSumName.Form("hSumE%i",j); - } - - hSumE1 += hArray[i][0]; - hSumE2 += hArray[i][1]; - hSumE3 += hArray[i][2]; - hSumE4 += hArray[i][3]; + } + + hSumE1 += hArray[i][0]; + hSumE2 += hArray[i][1]; + hSumE3 += hArray[i][2]; + hSumE4 += hArray[i][3]; // std::cout<<"i "<GetEntries(); - hAvrE2 = hSumE2/histList->GetEntries(); - hAvrE3 = hSumE3/histList->GetEntries(); - hAvrE4 = hSumE4/histList->GetEntries(); + hAvrE1 = hSumE1/histList->GetEntries(); + hAvrE2 = hSumE2/histList->GetEntries(); + hAvrE3 = hSumE3/histList->GetEntries(); + hAvrE4 = hSumE4/histList->GetEntries(); ofile <<"Average energies are:\t"<(atoi(parameter)); - fEnergyInput.Set(kRaNOPEAKS); - fEnergy.Set(kRaNOPEAKS); + fEnergyInput.Set(kRaNOPEAKS); + fEnergy.Set(kRaNOPEAKS); fPeak.Set(kRaNOPEAKS); for (Int_t i = 0; i < kRaNOPEAKS; i++) { fipr.getline(line, lineLength); diff --git a/AculData/AculCalibration.h b/AculData/AculCalibration.h index 4dba815..80c3226 100755 --- a/AculData/AculCalibration.h +++ b/AculData/AculCalibration.h @@ -74,7 +74,7 @@ private: //these variables are the main for the class TArrayD fA; //calibration parameter, f(x) = fA*x + fB - TArrayD fB; //calibration parameter, f(x) = fA*x + fB + TArrayD fB; //calibration parameter, f(x) = fA*x + fB TArrayD fPeak; //v teto promenne je ulozena momentalni hodnota piku v kanalech, zejmena v jedne fci, mozno udelat ji jako lokalni, bude navratovou hodnotou fce PeaksFitting, predelat delku pole @@ -83,7 +83,7 @@ private: TString fParFileName; //it is very doubtful that we need this class variable - TFile *fCalInformation; + TFile *fCalInformation; @@ -144,7 +144,7 @@ public: Bool_t CalculateCalibParameters(const char* inputfile, const char* block, const char* treename, Int_t lowerchannel = 0, Int_t upperchannel = 4095, Int_t nEBins = 1000, Int_t lowersubaddress = 0, - Int_t uppersubaddress = ADDRESSNUMBER-1); //calculate calibration parameters for given block in given file + Int_t uppersubaddress = ADDRESSNUMBER-1); //calculate calibration parameters for given block in given file //function is not completely ready to use // @@ -176,13 +176,13 @@ public: void CalibrateRawSpectra(const char* inputfile, const char* block, const char* treename, Int_t lowerchannel = 0, Int_t upperchannel = 4095, Int_t nEBins = 1000, Int_t lowersubaddress = 0, Int_t uppersubaddress = ADDRESSNUMBER-1); - void FindEnergyPeaks(TCanvas *c1, const char* ifile, const char* outfile); + void FindEnergyPeaks(TCanvas *c1, const char* ifile, const char* outfile); // Outputs calibrated energies for each channel in txt file // // - // - - void FindAverageEnergies(const char* ifile, const char* outfile); + // + + void FindAverageEnergies(const char* ifile, const char* outfile); // Outputs average values of calibrated energies for the whole detector in txt file // // diff --git a/AculData/AculData.mk b/AculData/AculData.mk index 0d57c29..7ca96d4 100755 --- a/AculData/AculData.mk +++ b/AculData/AculData.mk @@ -2,7 +2,7 @@ # AculData input with some variables ################################################################################ -ACULDATALIBS := -lCore -lCint -lRIO -lTree -lNet -lThread -lHist -lMatrix -lMathCore -lGpad -lGraf -lSpectrum #-lTELoss +ACULDATALIBS := -lCore -lRIO -lTree -lNet -lThread -lHist -lMatrix -lMathCore -lGpad -lGraf -lSpectrum #-lTELoss # Add inputs and outputs from these tool invocations to the build variables ACULDATA_HEADERS += \ @@ -13,14 +13,14 @@ $(ACULDATA)/linkdef.h ACULDATACPP_SRCS += \ $(ACULDATA)/AculCalibration.cpp \ $(ACULDATA)/AculCalibCsI.cpp \ -$(ACULDATA)/AculDataCint.cpp +$(ACULDATA)/AculDataDict.cpp ACULDATAOBJS += \ $(ACULDATA)/AculCalibration.o \ $(ACULDATA)/AculCalibCsI.o \ -$(ACULDATA)/AculDataCint.o +$(ACULDATA)/AculDataDict.o ACULDATACPP_DEPS += \ $(ACULDATA)/AculCalibration.d \ $(ACULDATA)/AculCalibCsI.d \ -$(ACULDATA)/AculDataCint.d \ No newline at end of file +$(ACULDATA)/AculDataDict.d \ No newline at end of file diff --git a/TELoss/TELoss.mk b/TELoss/TELoss.mk index 78b7f09..c018c54 100755 --- a/TELoss/TELoss.mk +++ b/TELoss/TELoss.mk @@ -2,19 +2,24 @@ # TELoss input with some variables ################################################################################ -TELOSSLIBS := -lCore -lCint -lMathCore -lMatrix -lHist -lgfortran +# TELOSSLIBS := -lCore -lCint -lMathCore -lMatrix -lHist -lgfortran +TELOSSLIBS := -lCore -lMathCore -lMatrix -lHist -lgfortran # Add inputs and outputs from these tool invocations to the build variables +TELOSS_HEADERS += \ +$(TELOSS)/TELoss.h \ +$(TELOSS)/linkdef.h + TELOSSCPP_SRCS += \ $(TELOSS)/TELoss.cpp \ -$(TELOSS)/TELossCint.cpp +$(TELOSS)/TELossDict.cpp TELOSSOBJS += \ $(TELOSS)/ELOSS.o \ $(TELOSS)/TELoss.o \ -$(TELOSS)/TELossCint.o +$(TELOSS)/TELossDict.o TELOSSCPP_DEPS += \ $(TELOSS)/TELoss.d \ -$(TELOSS)/TELossCint.d +$(TELOSS)/TELossDict.d diff --git a/load.cxx b/load.cxx index c9cd115..dd654fe 100755 --- a/load.cxx +++ b/load.cxx @@ -1,4 +1,5 @@ { - gSystem->Load("~/workspace/Utilities/libAculData.so"); + gSystem->Load("libTELoss.so"); + gSystem->Load("libAculData.so"); } diff --git a/makefile b/makefile index 9f9b6a6..92873f2 100755 --- a/makefile +++ b/makefile @@ -41,23 +41,30 @@ htmldoc: libAculData.so clean: -$(RM) $(ACULDATAOBJS) $(ACULDATACPP_DEPS) - -$(RM) $(ACULDATA)/AculDataCint.* libAculData.so + -$(RM) $(ACULDATA)/AculDataDict.* *.pcm $(ACULDATA)/*.pcm + -$(RM) libAculData.so -@echo ' ' -$(RM) $(TELOSSOBJS) $(TELOSSCPP_DEPS) - -$(RM) $(TELOSS)/TELossCint.* libTELoss.so + -$(RM) $(TELOSS)/TELossDict.* *.pcm $(TELOSS)/*.pcm + -$(RM) libTELoss.so -@echo ' ' -$(RM) htmldoc -@echo ' ' -# Those *Cint* files below need special treating: -$(ACULDATA)/AculDataCint.cpp: - -@echo 'Pre-building AculDataCint.cpp and AculDataCint.h files' - -rootcint -f $(ACULDATA)/AculDataCint.cpp -c -p $(ACULDATA_HEADERS) +# Those *Dictionary* files below need special treating: +$(ACULDATA)/AculDataDict.cpp: + -@echo 'Pre-building AculDataDict.cpp and AculDataCint.h files' + -rootcling -f $(ACULDATA)/AculDataDict.cpp -p $(ACULDATA_HEADERS) + -@echo 'Creating: link to AculDataDict_rdict.pcm' + -ln -s $(ACULDATA)/AculDataDict_rdict.pcm . -@echo ' ' -$(TELOSS)/TELossCint.cpp: - -@echo 'Pre-building TELossCint.cpp and TELossCint.h files' - -rootcint -f $(TELOSS)/TELossCint.cpp -c -p $(TELOSS)/TELoss.h $(TELOSS)/linkdef.h +$(TELOSS)/TELossDict.cpp: + -@echo 'Pre-building TELossDict.cpp and TELossDict_rdict.pcm files' + @echo + -rootcling -f $@ -c $(CXXFLAGS) -p $(TELOSS_HEADERS) + -@echo 'Creating: link to TELossDict_rdict.pcm' + -ln -s $(TELOSS)/TELossDict_rdict.pcm . -@echo ' ' #*.so files @@ -83,7 +90,6 @@ libTELoss.so: $(TELOSSOBJS) @echo 'Building file: $@' @echo 'Invoking: $(CC) Compiler' $(CC) -I$(ROOTINCS) -O0 -g3 -Wall -c -fmessage-length=0 -fPIC $(ROOTCFLAGS) -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<" -# $(CC) -I$(ROOTINCS) -O2 -Wall -mmmx -msse -msse2 -msse3 -mfpmath=sse,387 -march=nocona -mtune=nocona -c -fmessage-length=0 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<" @echo 'Finished building: $@' @echo ' ' -- 2.18.1