#pragma once #include "Evt.hh" #include "showrec_util.hh" #include "ShowerPdf.hh" struct ShowerFit { int verb; string name; double total_time; int nfits; // -------------------------- // The Pdf to use in the fit //--------------------------- ShowerPdfBase* pdf; // -------------------------- // which parameters to fix //--------------------------- vector fixed_vars; void fix_vars( int v1, int v2=-1, int v3=-1, int v4=-1, int v5=-1, int v6=-1, int v7=-1 ) { fixed_vars = pack( v1,v2,v3,v4,v5,v6,v7 ); } //------------------------------------------- // minimizer and recording controll //------------------------------------------- string minimizer_name; string minimizer_algo; vector path_; bool record; double tollerance; //------------------------------------------- // Hit and DOM selection //------------------------------------------- double max_dist; ShowerFit( string name_, string pdfname ) { name = name_; pdf = 0; if (pdfname == "mest" ) pdf = new MestShowerPdf(); if (pdfname == "digi" ) pdf = new DigitalShowerPdf(); if (!pdf) fatal ("unknown pdf", pdfname); _init(); } ShowerFit(string name_, ShowerPdfBase* pdf_ ) { name = name_; pdf = pdf_; _init(); } ShowerFit() { _init(); } virtual ~ShowerFit(){}; void _init() { nfits = 0; total_time = 0; verb = 1; record = false; fixed_vars = pack( 6 ); tollerance = 1e-2; minimizer_name = "GSLMultiMin"; //Minuit2 minimizer_algo = "BFGS2"; //Migrad max_dist = 0; } Trk fit( Trk& start_track , Det& det, vector& data, int do_init_pdf /*=1*/ ); Trk fit2( Trk& start_track , Det& det, vector& data, int do_init_pdf /*=1*/ ); Trk fit3( Trk& start_track , Det& det, vector& data, int do_init_pdf /*=1*/ ); // -- the fitting functions -- double score_function( const double* pars ) // delegate to pdf->eval { static Trk trk; to_trk( pars, trk ); return pdf -> eval( trk ); } ClassDefNV( ShowerFit, 1 ) };