Hello
I have a problem with a macro which gives under Win NT 4.0 (sp4) with
Root 2.23/09 an error which is not understandable to me:
The variable definition/declaration is
volatile Int_t iEnd = 0; or
Int_t iEnd = 0;
During program execution I get the error:
Warning: Re-initialization ignored const iEnd
FILE:H:\LorentzFebruar00\root\lore
ntz\mess00apr\phfit.c LINE:222
*** Interpreter error recovered ***
sometimes I can overcome this by using .L befor .x
the listing of the complete code is attached
Thanks in advance
Stephan Heising
#include <fstream.h>
typedef struct _event
{
char date[20], time[20];
char cfib[20];
Int_t lno;
Float_t indu;
Float_t bias;
Float_t irev;
Float_t delt;
Int_t fiber;
Float_t pt1, pt2, pt3, pt4, pt5, pt6, pt7;
Float_t sip, np, bxPHp, bsPHp, bxSNp, bsSNp;
Float_t sin, nn, bxPHn, bsPHn, bxSNn, bsSNn;
Float_t *aph, *asn, *anoi, *ax;
Int_t nph, nsn, nnoi, nx;
} event;
Double_t fitf (Double_t *x, Double_t *par)
// size of x: 1
// size of par: 4
{
Double_t fitval;
if (x[0] < par[1])
fitval = par[0] * exp (x[0] - par[1]) + par[2];
else
fitval = par[2] + par[0] * exp (-.5*((x[0] - par[1])/par[3])**2.);
return fitval;
}
Double_t fitf1 (Double_t *x, Double_t *par)
// size of x: 1
// size of par: 3
{
Double_t fitval;
if (x[0] < par[1])
fitval = par[0] * exp (x[0] - par[1]) + par[2];
else
fitval = par[2];
return fitval;
}
int readev (ifstream& in, event& ev)
{
in >> ev.date;
in >> ev.time;
// cout << ev.date << " " << ev.time << "\n";
in >> ev.lno;
in >> ev.indu;
in >> ev.bias;
in >> ev.irev;
in >> ev.delt;
in >> ev.fiber;
switch (ev.fiber)
{
case 0:
strcpy (ev.cfib, "SLD ");
break;
case 1:
strcpy (ev.cfib, "p660");
break;
case 2:
strcpy (ev.cfib, "n660");
break;
case 3:
strcpy (ev.cfib, "1060");
break;
}
in >> ev.pt1 >> ev.pt2 >> ev.pt3;
in >> ev.pt4 >> ev.pt5 >> ev.pt6;
in >> ev.pt7;
in >> ev.sip >> ev.np >> ev.bxPHp >> ev.bsPHp >> ev.bxSNp >> ev.bsSNp;
in >> ev.sin >> ev.nn >> ev.bxPHn >> ev.bsPHn >> ev.bxSNn >> ev.bsSNn;
in >> ev.nph;
ev.aph = new Float_t[ev.nph];
for (Int_t i=0;i< ev.nph; i++)
{
in >> ev.aph[i];
}
in >> ev.nsn;
ev.asn = new Float_t[ev.nsn];
for (Int_t i=0;i< ev.nsn; i++)
{
in >> ev.asn[i];
}
in >> ev.nnoi;
ev.anoi = new Float_t[ev.nnoi];
for (Int_t i=0;i< ev.nnoi; i++)
{
in >> ev.anoi[i];
}
in >> ev.nx;
ev.ax = new Float_t[ev.nx];
for (Int_t i=0;i< ev.nx; i++)
{
in >> ev.ax[i];
}
return in.good();
}
int phfit (char *fName, Int_t logi, Int_t logf)
{
// modified log_rep128a4.c to use C++ streams to read from file.
// or string
// PH information is stored in the txt file and analysed.
ifstream in;
ofstream out;
in.open(fName, ios::in);
out.open("out.txt", ios::out);
Int_t iEnd = 0;
char sDetektor[100], StrTmp[100];
Float_t aPitchP, pPitchP; // real pitch and barycenter used pitch
Float_t aPitchN, pPitchN; // real pitch and barycenter used pitch
Float_t pitchConvP; // factor to convert used to real pitch
Float_t pitchConvN; // for P and N side
Float_t TAdd; // value to add to temperature for
// displaying both graphs
Float_t yAdd; // value to add to x-value (y-axis)
// for displaying
event ev1;
// Set global options for postscript graphics (bw)
//
gStyle->SetOptFit (0);
gStyle->SetOptStat (0);
gStyle->SetCanvasBorderMode(0);
gStyle->SetPadBorderMode(0);
gStyle->SetFrameBorderMode(0);
gStyle->SetPadColor(0);
gStyle->SetCanvasColor(0);
gStyle->SetTitleColor(0);
gStyle->SetTitleW (.9);
gStyle->SetTitleH (.06);
gStyle->SetTitleX (.15);
gStyle->SetTitleY (.97);
gStyle->SetPaperSize (20, 29);
gStyle->SetPadLeftMargin (.15);
gStyle->SetPadRightMargin (.05);
Int_t iFound = 0;
TPad *pTPad;
TCanvas *cPH = (TCanvas*) gROOT->FindObject ("PH");
if (cPH == NULL)
{
TCanvas *cPH = new TCanvas("PH", "canvas1", 0, 0, 640, 480);
TPad *padPH = new TPad ("padPH", "T vs B Pad", 0, 0, 1, 1);
}
else
{
TPad *padPH = (TPad*) gROOT->FindObject ("padPH");
iFound = 1;
}
cPH->Draw ();
cPH->cd ();
// create histogram to present x vs B data
//
padPH->Draw ();
if (iFound == 0)
{
TH2F *hrPH = new TH2F ("histPH", "", 2, 8000, 256*50, 2, -50, 50);
hrPH->SetLabelSize (.04, "X");
hrPH->SetLabelOffset (.02, "X");
hrPH->SetLabelSize (.04, "Y");
hrPH->SetLabelOffset (.025, "Y");
}
else
{
TH2F *hrPH = (TH2F*) gROOT->FindObject ("histPH");
hrPH->SetBins (2, 8000, 256*50, 2, -50, 50);
hrPH->Clear ();
hrPH->SetLabelSize (.04, "X");
hrPH->SetLabelOffset (.02, "X");
hrPH->SetLabelSize (.04, "Y");
hrPH->SetLabelOffset (.025, "Y");
}
padPH->cd ();
hrPH->Draw ();
Int_t iStart = 0;
while (iEnd == 0)
{
readev(in, ev1);
out << "\n" << ev1.lno;
if (ev1.lno == logi)
{
// cout << "\n" << ev1.lno;
// cout << "B=" << ev1.indu << "T|U="<< ev1.bias;
// cout << " V|f=" << ev1.cfib << "\n";
iStart = 1;
}
if (ev1.lno == logf)
{
iEnd = 1; // log found
}
if (in.eof ())
iEnd = 1;
if (iStart != 0)
{
Float_t *ErrPh = new Float_t[ev1.nph];
Float_t *ErrX = new Float_t[ev1.nph];
Int_t i;
for (i=0; i<ev1.nph; i++)
{
ErrPh[i] = 1000. / (fabs(ev1.aph[i] * ev1.aph[i])+.001);
// ErrPh[i] = 100.;
ErrX[i] = 30.;
}
TGraphErrors *gPH = new TGraphErrors (ev1.nph, ev1.ax, ev1.aph);
gPH->SetMarkerStyle (21);
gPH->SetMarkerSize (.8);
gPH->Draw ("L");
g1 = new TF1("g1","[3]*sin(x*[4]+[5])+[0]*exp(-0.5*((x-[1])/[2])^2)", 1000, 5000);
g1->SetParameters (10, 2500, 100, 0, 1);
gPH->Fit ("g1", "RQMI");
Double_t f1p0 = g1->GetParameter (0);
Double_t f1p1 = g1->GetParameter (1);
Double_t f1p2 = g1->GetParameter (2);
Double_t f1p3 = g1->GetParameter (3);
Double_t f1p4 = g1->GetParameter (4);
Double_t f1p5 = g1->GetParameter (5);
Double_t cp = g1->GetChisquare ();
out << " g:" << f1p0 << " " << f1p1 << " " << f1p2;
out << " | s:" << f1p3 << " " << f1p4 << " " << f1p5;
out << " | c2 = " << cp;// << "\n";
g2 = new TF1("g2",fitf1, 8000, 12000, 3);
g2->SetParameters (-300, 10000, -1); //, 100, 1, 1);
gPH->Fit ("g2", "RMI");
Double_t f2p0 = g2->GetParameter (0);
Double_t f2p1 = g2->GetParameter (1);
Double_t f2p2 = g2->GetParameter (2);
// Double_t f2p3 = g2->GetParameter (3);
// Double_t f2p4 = g1->GetParameter (4);
// Double_t f2p5 = g1->GetParameter (5);
// Double_t f2p6 = g1->GetParameter (6);
Double_t cn = g2->GetChisquare ();
Double_t x1[1000], y1[1000];
for (i=0; i<1000; i++)
{
x1[i] = 8000 + 4000. / (i+1);
if (x1[i] < f2p1)
y1[i] = f2p0 * exp (x1[i] - f2p1) + f1p2;
else
y1[i] = f1p2;
}
TGraph *gFit = new TGraph (1000, x1, y1);
gFit->SetMarkerStyle (21);
gFit->SetMarkerSize (.8);
gFit->SetLineColor (kRed);
gFit->SetLineWidth (2);
gFit->Draw ("LP");
cout << "e: " << f2p0 << " " << f2p1 << " | k: " << f2p2;
cout << " | c2 = " << cn << "\n"; */
}
}
in.close();
out.close ();
return (0);
}
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:24 MET