#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "AculRaw.h" //potreba zaridit nezavislost na teto tride #include #include //#include #include #include #define DEFAULTNOPEAKS 20 #define BLOCKSNUMBER 24 #define ADDRESSNUMBER 16 using std::cout; using std::endl; using std::setw; using std::setprecision; using std::stringstream; using std::ostringstream; //using std::ifstream; //using std::ofstream; class AculCalibration : public TObject { public: //smysl jako verejne globalni promenne maji: //fNOSpectra - pocet zkalibrovanych spekter //???? - pocet spravne zkalibrovanych spekter //???? - pocet nespravne zkalibrovanych spekter //fEnergy[4] - tabulka s energiemi piku, nacita se zvenci //private: // TObjArray *fHRawList; //list of raw histograms, list is set to owner TObjArray fHRawList; //list of raw histograms, list is set to owner TObjArray fHAnalyzedList; //list of fitted and analyzed histograms, list is set to owner TObjArray fHEnergyList; //list of calibrated histograms, list is set to owner THStack fHEnergyStack; //some stack THStack *fCurrentHStack; //dodelat current histograms TObjArray fCurrentHistList; // TRandom3 *fRanGen; // static TRandom3 fRanGen; //! // THStack *fHStack; //parameters to be read from file Int_t kRaNOPEAKS; Double_t fEnergy[DEFAULTNOPEAKS]; Double_t fLowerPeakRelativeHight; //pouziva se, private Double_t fUpperPeakRelativeHight; //pouziva se, private, nastavit nenulovou prednastavenou hodnotu Double_t fPeakPositionTolerance; //pouziva se, private Width_t fFitFuncLineWidth; //private Double_t fFitMinSigma; //pouziva se, private Double_t fFitPeakThreshold; //pouziva se, private, prozkoumat, k cemu vlastne slouzi ve fci ShowPeaks, popremyslet o vhodnem prednastaveni v konstruktoru //tyto promenne jsou smyslem tridy, mely by tedy byt snad jako jedine verejne Double_t fA[BLOCKSNUMBER][ADDRESSNUMBER]; //kalibracni parametry, f(x) = fA*x + fB Double_t fB[BLOCKSNUMBER][ADDRESSNUMBER]; //kalibracni parametry, f(x) = fA*x + fB Double_t fC[BLOCKSNUMBER][ADDRESSNUMBER]; //treti kalibracni parametr, jine zavislosti nez pol1 Double_t fD[BLOCKSNUMBER][ADDRESSNUMBER]; //ctvrty kalibracni parametr //smysl je velmi pochybny TFile *fCalInformation; // AculCalibratedData *fCalData; //private: Double_t fPeak[DEFAULTNOPEAKS]; //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 public: AculCalibration(); // AculCalibration(const char* parfile); // virtual ~AculCalibration(); ClassDef(AculCalibration, 1); //public Bool_t SetInputParameters(const char* inputparfile = "parforcal.par"); Bool_t SetCalibrationParameters(const char* calparfile); //public void PrintInputParameters(); void PrintCalibrationParameters(const Int_t blockmin = 1, const Int_t blockmax = BLOCKSNUMBER - 1); //public Bool_t CalculateCalibParameters(const char* inputfilename, const Int_t block, Int_t lowerchannel = 0, Int_t upperchannel = 4095, Int_t lowersubaddress = 0, Int_t uppersubaddress = 15); //calculate calibration parameters for given block in given file Bool_t CalculateCalibParameters(const char* inputfile, const char* block, const Int_t address, const char* treename, Int_t lowerchannel = 0, Int_t upperchannel = 4095, Int_t lowersubaddress = 0, Int_t uppersubaddress = 15); //calculate calibration parameters for given block in given file Int_t CalibrateBlock(const Char_t* inputfilename, const Int_t block, const Char_t* outputfilename, Int_t lowersubaddress = 0, Int_t uppersubaddress = 15); //vysvetlit, co je to outputfile Int_t PeaksFitting(TH1I* hSpectrum, Option_t* option = "", Double_t sigmamin = 2); //possible options: "V", "Q", "" Int_t SearchPeaks(const TH1 *hin, Double_t sigma = 2, Option_t *option = "", Double_t threshold = 0.05, const Int_t searchedpeaks = 100); void FillRawSpectraFile(const char* rawdatafile, const char* block, const char* treename, TCanvas* rawCanvas = NULL, Option_t *option = "", Int_t xaxismin = 0, Int_t xaxismax = 4096); void ShowRawSpectra(const char* filename, const Int_t block, TCanvas* rawCanvas = NULL, Int_t xaxismin = 0, Int_t xaxismax = 4096, /*TObjArray* histList = NULL,*/ const Int_t subaddress = 16); void ShowSpectra(const char* filename, TCanvas* rawCanvas = NULL, Option_t *option = "", Int_t xaxismin = 0, Int_t xaxismax = 4096, /*TObjArray* histList = NULL,*/ const Int_t subaddress = 16); void ShowAnalyzedSpectra(const char* filename, TCanvas* fittedRawCanvas = NULL, Int_t xaxismin = 0, Int_t xaxismax = 4096, Int_t subaddress = 16); void ShowEnergySpectra(const char *filename, TCanvas* energyCanvas = NULL, const Int_t subaddress = 16, Option_t* option = "", Double_t xaxismin = 0., Double_t xaxismax = 10.); //option: "sum", "c", "+", // void //dodelat funkce TTree* Get...(...) pro raw, anal i E spectra Bool_t AddCalFileToList(const char* calfilelist = "CalFileList.log"); void ClearHistograms(Option_t* option = ""); void DeleteStacks(Option_t* option = ""); void MakeCalibrationFile(Char_t* calibrationfile, Char_t* calfilelist); void Reset(); //private: };