Changeset 3053 in Sophya for trunk/SophyaLib/HiStats/hisprof.cc


Ignore:
Timestamp:
Aug 12, 2006, 7:29:29 PM (19 years ago)
Author:
cmv
Message:

correction bug + addaptation pour ecriture fits cmv 12/8/2006

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaLib/HiStats/hisprof.cc

    r2868 r3053  
    1818*/
    1919HProf::HProf()
    20 : Histo()
    21 , SumY(NULL), SumY2(NULL), SumW(NULL), Ok(false), YMin(1.), YMax(-1.), Opt(0)
     20: Histo(), mSumY(NULL), mSumY2(NULL), mSumW(NULL)
     21, Ok(false), YMin(1.), YMax(-1.), Opt(0)
    2222{
    2323}
     
    3232*/
    3333HProf::HProf(r_8 xMin, r_8 xMax, int_4 nBin, r_8 yMin, r_8 yMax)
    34 : Histo(xMin,xMax,nBin)
    35 , SumY( (nBin>0) ? new r_8[nBin] : NULL)
    36 , SumY2((nBin>0) ? new r_8[nBin] : NULL)
    37 , SumW( (nBin>0) ? new r_8[nBin] : NULL)
    38 , Ok(false), YMin(yMin), YMax(yMax), Opt(0)
    39 {
    40   Histo::Errors();
    41   Zero();
     34: Histo(), mSumY(NULL), mSumY2(NULL), mSumW(NULL)
     35{
     36  CreateOrResize(xMin,xMax,nBin,yMin,yMax);
    4237}
    4338
     
    4742*/
    4843HProf::HProf(r_4 xMin, r_4 xMax, int_4 nBin, r_4 yMin, r_4 yMax)
    49 : Histo((r_8)xMin,(r_8)xMax,nBin)
    50 , SumY( (nBin>0) ? new r_8[nBin] : NULL)
    51 , SumY2((nBin>0) ? new r_8[nBin] : NULL)
    52 , SumW( (nBin>0) ? new r_8[nBin] : NULL)
    53 , Ok(false), YMin((r_8)yMin), YMax((r_8)yMax), Opt(0)
    54 {
    55   Histo::Errors();
    56   Zero();
     44: Histo(), mSumY(NULL), mSumY2(NULL), mSumW(NULL)
     45{
     46  CreateOrResize((r_8)xMin,(r_8)xMax,nBin,(r_8)yMin,(r_8)yMax);
    5747}
    5848
     
    6353HProf::HProf(const HProf& H)
    6454: Histo(H)
    65 , SumY((H.mBins>0)  ? new r_8[H.mBins] : NULL)
    66 , SumY2((H.mBins>0) ? new r_8[H.mBins] : NULL)
    67 , SumW((H.mBins>0)  ? new r_8[H.mBins] : NULL)
     55, mSumY((H.mBins>0)  ? new r_8[H.mBins] : NULL)
     56, mSumY2((H.mBins>0) ? new r_8[H.mBins] : NULL)
     57, mSumW((H.mBins>0)  ? new r_8[H.mBins] : NULL)
    6858, Ok(H.Ok), YMin(H.YMin), YMax(H.YMax), Opt(H.Opt)
    6959{
    7060  if(mBins>0) {
    71     memcpy(SumY,  H.SumY,  mBins*sizeof(r_8));
    72     memcpy(SumY2, H.SumY2, mBins*sizeof(r_8));
    73     memcpy(SumW,  H.SumW,  mBins*sizeof(r_8));
     61    memcpy(mSumY,  H.mSumY,  mBins*sizeof(r_8));
     62    memcpy(mSumY2, H.mSumY2, mBins*sizeof(r_8));
     63    memcpy(mSumW,  H.mSumW,  mBins*sizeof(r_8));
    7464  }
    7565  UpdateHisto();
     
    7868/********* Methode *********/
    7969/*!
     70  allocation
     71*/
     72void HProf::CreateOrResize(r_8 xMin, r_8 xMax, int_4 nBin, r_8 yMin, r_8 yMax)
     73{
     74  //cout<<"HProf::CreateOrResize()"<<endl;
     75  Histo::CreateOrResize(xMin,xMax,nBin);
     76  Histo::Errors();
     77  if(mSumY !=NULL) {delete[] mSumY;  mSumY = NULL;}
     78  if(mSumY2!=NULL) {delete[] mSumY2; mSumY2= NULL;}
     79  if(mSumW !=NULL) {delete[] mSumW;  mSumW = NULL;}
     80  if(nBin>0) {
     81    mSumY  = new r_8[nBin]; memset(mSumY, 0, nBin*sizeof(r_8));
     82    mSumY2 = new r_8[nBin]; memset(mSumY2,0, nBin*sizeof(r_8));
     83    mSumW  = new r_8[nBin]; memset(mSumW, 0, nBin*sizeof(r_8));
     84  }
     85  YMin = yMin; YMax = yMax;
     86  Ok = false;
     87  Opt = 0;
     88}
     89
     90/********* Methode *********/
     91/*!
    8092  Des-allocation
    8193*/
    8294void HProf::Delete()
    8395{
    84   if( SumY  != NULL ) { delete[] SumY;  SumY = NULL;}
    85   if( SumY2 != NULL ) { delete[] SumY2; SumY2 = NULL;}
    86   if( SumW  != NULL ) { delete[] SumW;  SumW = NULL;}
     96  //cout<<"HProf::Delete()"<<endl;
     97  Histo::Delete();
     98  if(mSumY != NULL) {delete[] mSumY;  mSumY = NULL;}
     99  if(mSumY2!= NULL) {delete[] mSumY2; mSumY2 = NULL;}
     100  if(mSumW != NULL) {delete[] mSumW;  mSumW = NULL;}
    87101  Ok = false;
    88102}
     
    94108HProf::~HProf()
    95109{
    96 Delete();
     110  Delete();
    97111}
    98112
     
    112126void HProf::Zero()
    113127{
    114   memset(SumY,  0, mBins*sizeof(r_8));
    115   memset(SumY2, 0, mBins*sizeof(r_8));
    116   memset(SumW,  0, mBins*sizeof(r_8));
     128  Histo::Zero();
     129  memset(mSumY,  0, mBins*sizeof(r_8));
     130  memset(mSumY2, 0, mBins*sizeof(r_8));
     131  memset(mSumW,  0, mBins*sizeof(r_8));
    117132  Ok = false;
    118   Histo::Zero();
    119133}
    120134
     
    158172r_8 m,e2;
    159173if(mBins>0) for(int_4 i=0;i<mBins;i++) {
    160   if(SumW[i]<=0.) {
     174  if(mSumW[i]<=0.) {
    161175    m = e2 = 0.;
    162176  } else {
    163     m  = SumY[i]/SumW[i];
    164     e2 = SumY2[i]/SumW[i] - m*m;
    165     if(Opt) e2 /= SumW[i];
     177    m  = mSumY[i]/mSumW[i];
     178    e2 = mSumY2[i]/mSumW[i] - m*m;
     179    if(Opt) e2 /= mSumW[i];
    166180  }
    167181  mData[i] = m;
     
    187201  else {
    188202    Ok = false;
    189     SumY[numBin]  += y*w;
    190     SumY2[numBin] += y*y*w;
    191     SumW[numBin]  += w;
     203    mSumY[numBin]  += y*w;
     204    mSumY2[numBin] += y*y*w;
     205    mSumW[numBin]  += w;
    192206    nHist += w;
    193207    nEntries++;
     
    206220  else {
    207221    Ok = false;
    208     SumY[numBin]  += y*w;
    209     SumY2[numBin] += y*y*w;
    210     SumW[numBin]  += w;
     222    mSumY[numBin]  += y*w;
     223    mSumY2[numBin] += y*y*w;
     224    mSumW[numBin]  += w;
    211225    nHist += w;
    212226    nEntries++;
     
    224238Histo *hthis = (Histo *) this;
    225239*hthis = (Histo) h;
    226 if(!SumY)  SumY  = new r_8[mBins];
    227 if(!SumY2) SumY2 = new r_8[mBins];
    228 if(!SumW)  SumW  = new r_8[mBins];
    229 memcpy(SumY,  h.SumY,  mBins*sizeof(r_8));
    230 memcpy(SumY2, h.SumY2, mBins*sizeof(r_8));
    231 memcpy(SumW,  h.SumW,  mBins*sizeof(r_8));
     240if(!mSumY)  mSumY  = new r_8[mBins];
     241if(!mSumY2) mSumY2 = new r_8[mBins];
     242if(!mSumW)  mSumW  = new r_8[mBins];
     243memcpy(mSumY,  h.mSumY,  mBins*sizeof(r_8));
     244memcpy(mSumY2, h.mSumY2, mBins*sizeof(r_8));
     245memcpy(mSumW,  h.mSumW,  mBins*sizeof(r_8));
    232246Ok = h.Ok;
    233247YMin = h.YMin;
     
    252266*hthis += (Histo) a;
    253267if(mBins>0) for(int_4 i=0;i<mBins;i++) {
    254   SumY[i]  += a.SumY[i];
    255   SumY2[i] += a.SumY2[i];
    256   SumW[i]  += a.SumW[i];
     268  mSumY[i]  += a.mSumY[i];
     269  mSumY2[i] += a.mSumY2[i];
     270  mSumW[i]  += a.mSumW[i];
    257271}
    258272updatehisto();
     
    279293  // Le nombre de bins est il plus grand ??
    280294  if( mBins > binold ) {
    281     delete [] SumY;  SumY  = new r_8[nbinew]; memset(SumY, 0,mBins*sizeof(r_8));
    282     delete [] SumY2; SumY2 = new r_8[nbinew]; memset(SumY2,0,mBins*sizeof(r_8));
    283     delete [] SumW;  SumW  = new r_8[nbinew]; memset(SumW, 0,mBins*sizeof(r_8));
     295    delete [] mSumY;  mSumY  = new r_8[nbinew]; memset(mSumY, 0,mBins*sizeof(r_8));
     296    delete [] mSumY2; mSumY2 = new r_8[nbinew]; memset(mSumY2,0,mBins*sizeof(r_8));
     297    delete [] mSumW;  mSumW  = new r_8[nbinew]; memset(mSumW, 0,mBins*sizeof(r_8));
    284298  }
    285299
     
    294308    r_8 wY = 0., wY2 = 0., wW = 0.;
    295309    if( ima == imi ) {
    296       wY  = H.SumY[imi]  * binWidth/H.binWidth;
    297       wY2 = H.SumY2[imi] * binWidth/H.binWidth;
    298       wW  = H.SumW[imi]  * binWidth/H.binWidth;
     310      wY  = H.mSumY[imi]  * binWidth/H.binWidth;
     311      wY2 = H.mSumY2[imi] * binWidth/H.binWidth;
     312      wW  = H.mSumW[imi]  * binWidth/H.binWidth;
    299313    } else {
    300       wY  += H.SumY[imi]  * (H.BinHighEdge(imi)-xmi)/H.binWidth;
    301       wY  += H.SumY[ima]  * (xma -H.BinLowEdge(ima))/H.binWidth;
    302       wY2 += H.SumY2[imi] * (H.BinHighEdge(imi)-xmi)/H.binWidth;
    303       wY2 += H.SumY2[ima] * (xma -H.BinLowEdge(ima))/H.binWidth;
    304       wW  += H.SumW[imi]  * (H.BinHighEdge(imi)-xmi)/H.binWidth;
    305       wW  += H.SumW[ima]  * (xma -H.BinLowEdge(ima))/H.binWidth;
     314      wY  += H.mSumY[imi]  * (H.BinHighEdge(imi)-xmi)/H.binWidth;
     315      wY  += H.mSumY[ima]  * (xma -H.BinLowEdge(ima))/H.binWidth;
     316      wY2 += H.mSumY2[imi] * (H.BinHighEdge(imi)-xmi)/H.binWidth;
     317      wY2 += H.mSumY2[ima] * (xma -H.BinLowEdge(ima))/H.binWidth;
     318      wW  += H.mSumW[imi]  * (H.BinHighEdge(imi)-xmi)/H.binWidth;
     319      wW  += H.mSumW[ima]  * (xma -H.BinLowEdge(ima))/H.binWidth;
    306320      if(ima>imi+1) for(int_4 ii=imi+1;ii<ima;ii++)
    307         {wY += H.SumY[ii]; wY2 += H.SumY2[ii]; wW += H.SumW[ii];}
     321        {wY += H.mSumY[ii]; wY2 += H.mSumY2[ii]; wW += H.mSumW[ii];}
    308322    }
    309     SumY[i] += wY; SumY2[i] += wY2; SumW[i] += wW;
    310   }
    311   // On synchronise les tableaux Sum?? et l'Histogramme
     323    mSumY[i] += wY; mSumY2[i] += wY2; mSumW[i] += wW;
     324  }
     325  // On synchronise les tableaux mSum?? et l'Histogramme
    312326  updatehisto();
    313327}
     
    317331  UpdateHisto();
    318332  Histo::Show(os);
     333  os <<"       ymin="<<YMin<<" ymax="<<YMax<<"  opt="<<Opt<< endl;
    319334}
    320335
     
    346361// Lecture des donnees propres a l'histogramme de profil.
    347362is.GetLine(strg,255);
    348 dobj->SumY  = new r_8[dobj->mBins];
    349 dobj->SumY2 = new r_8[dobj->mBins];
    350 dobj->SumW  = new r_8[dobj->mBins];
    351 is.Get(dobj->SumY,  dobj->mBins);
    352 is.Get(dobj->SumY2, dobj->mBins);
    353 is.Get(dobj->SumW,  dobj->mBins);
     363dobj->mSumY  = new r_8[dobj->mBins];
     364dobj->mSumY2 = new r_8[dobj->mBins];
     365dobj->mSumW  = new r_8[dobj->mBins];
     366is.Get(dobj->mSumY,  dobj->mBins);
     367is.Get(dobj->mSumY2, dobj->mBins);
     368is.Get(dobj->mSumW,  dobj->mBins);
    354369
    355370// Lecture de l'histogramme
    356371is >> (Histo&)(*dobj);
     372
    357373return;
    358374}
     
    379395sprintf(strg,"HProf: SumY SumY2 SumW");
    380396os.PutLine(strg);
    381 os.Put(dobj->SumY,  dobj->mBins);
    382 os.Put(dobj->SumY2, dobj->mBins);
    383 os.Put(dobj->SumW,  dobj->mBins);
     397os.Put(dobj->mSumY,  dobj->mBins);
     398os.Put(dobj->mSumY2, dobj->mBins);
     399os.Put(dobj->mSumW,  dobj->mBins);
    384400
    385401// Ecriture de l'histogramme
    386 // FIO_Histo fio_h((Histo&)*dobj);
    387 // fio_h.Write(os);
    388402os << (Histo&)(*dobj);
    389403
Note: See TracChangeset for help on using the changeset viewer.