Changeset 1912 in Sophya for trunk/SophyaPI/PIext/pawexecut.cc


Ignore:
Timestamp:
Feb 26, 2002, 6:31:27 PM (24 years ago)
Author:
cmv
Message:

v/hinteg v/deriv cmv 26/02/2002

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaPI/PIext/pawexecut.cc

    r1656 r1912  
    7878usage = "Integrate a 1D histogram";
    7979usage += "\n h/integ nameh1d [norm]";
    80 usage += "\n  Related commands: h/deriv";
     80usage += "\n norm<=0 means no normalisation (def norm=1)";
     81usage += "\n  Related commands: h/deriv v/integ v/deriv";
     82piac->RegisterCommand(kw,usage,this,hgrp);
     83
     84kw = "v/integ";
     85usage = "Integrate a TVector";
     86usage += "\n v/integ namevec [norm]";
     87usage += "\n norm<=0 means no normalisation (def norm=0)";
     88usage += "\n  Related commands: h/integ h/deriv v/deriv";
    8189piac->RegisterCommand(kw,usage,this,hgrp);
    8290
     
    8492usage = "Derivate a 1D histogram";
    8593usage += "\n h/deriv nameh1d";
    86 usage += "\n  Related commands: h/integ";
     94usage += "\n  Related commands: h/integ v/integ v/deriv";
     95piac->RegisterCommand(kw,usage,this,hgrp);
     96
     97kw = "v/deriv";
     98usage = "Derivate a TVector";
     99usage += "\n v/deriv namevec [deriv_option]";
     100usage += "\n deriv_option -1 replace v[i] with v[i]-v[i-1]";
     101usage += "\n               0 replace v[i] with (v[i+1]-v[i-1])/2 (default)";
     102usage += "\n              +1 replace v[i] with v[i+1]-v[i]";
     103usage += "\n  Related commands: h/integ h/deriv v/integ";
    87104piac->RegisterCommand(kw,usage,this,hgrp);
    88105
     
    214231} else if(kw == "h/integ") {
    215232  h_integ(tokens); return(0);
     233} else if(kw == "v/integ") {
     234  v_integ(tokens); return(0);
    216235} else if(kw == "h/deriv") {
    217236  h_deriv(tokens); return(0);
     237} else if(kw == "v/deriv") {
     238  v_deriv(tokens); return(0);
    218239} else if(kw == "h/rebin") {
    219240  h_rebin(tokens); return(0);
     
    551572
    552573/* methode */
     574void PAWExecutor::v_integ(vector<string>& tokens)
     575// Pour remplacer le contenu d'un TVector<r_8> par son integrale
     576//   normalisee a norm:
     577// Si norm <= 0 : pas de normalisation, integration seule
     578{
     579if(tokens.size()<1)
     580  {cout<<"Usage: v/integ namevec [norm]"<<endl; return;}
     581NamedObjMgr omg;
     582AnyDataObj* mobj = omg.GetObj(tokens[0]);
     583if(mobj==NULL)
     584  {cout<<"PAWExecutor::v_integ Error: unknow object"<<tokens[0]<<endl;
     585  return;}
     586r_8 norm=-1.;
     587if(tokens.size()>=2) norm = atof(tokens[1].c_str());
     588TVector<r_8>* v = dynamic_cast<TVector<r_8>*>(mobj);
     589if(!v)
     590  {cout<<"PAWExecutor::v_integ Error: "<<tokens[0]<<" not a TVector"<<endl;
     591  return;}
     592uint_4 n = v->Size();
     593if(n<=0)
     594  {cout<<"PAWExecutor::v_integ Error: "<<tokens[0]<<" is an empty vector"<<endl;
     595  return;}
     596if(n>1) for(uint_4 i=1;i<n;i++) (*v)(i)+=(*v)(i-1);
     597if(norm<=0. || (*v)(n-1)==0.) return;
     598norm /= (*v)(n-1);
     599for(int_4 i=0;i<n;i++) (*v)(i) *= norm;
     600}
     601
     602/* methode */
    553603void PAWExecutor::h_deriv(vector<string>& tokens)
    554604// Pour remplacer le contenu d'un histo 1D par sa derivee
     
    568618  return;}
    569619h1->HDeriv();
     620}
     621
     622/* methode */
     623void PAWExecutor::v_deriv(vector<string>& tokens)
     624// Pour remplacer le contenu d'un TVector<r_8> par sa derivee
     625// deriv_option = -1 replace v[i] with v[i]-v[i-1]
     626//              =  0 replace v[i] with (v[i+1]-v[i-1])/2 (default)
     627//              = +1 replace v[i] with v[i+1]-v[i]
     628{
     629if(tokens.size()<1)
     630  {cout<<"Usage: v/deriv namevec [deriv_option(-1,0,+1)]"<<endl; return;}
     631NamedObjMgr omg;
     632AnyDataObj* mobj = omg.GetObj(tokens[0]);
     633if(mobj==NULL)
     634  {cout<<"PAWExecutor::v_deriv Error: unknow object"<<tokens[0]<<endl;
     635  return;}
     636int_4 deriv_option = 0;
     637if(tokens.size()>=2) deriv_option = atoi(tokens[1].c_str());
     638TVector<r_8>* v = dynamic_cast<TVector<r_8>*>(mobj);
     639if(!v)
     640  {cout<<"PAWExecutor::v_deriv Error: "<<tokens[0]<<" not a TVector"<<endl;
     641  return;}
     642uint_4 n = v->Size();
     643if(n<=0)
     644  {cout<<"PAWExecutor::v_deriv Error: "<<tokens[0]<<" is an empty vector"<<endl;
     645  return;}
     646if(n<=1) return;
     647TVector<r_8> vsave(*v,false);
     648if(deriv_option<0) {
     649  for(uint_4 i=1;i<n;i++) (*v)(i) = vsave(i)-vsave(i-1);
     650  (*v)(0) = (*v)(1);
     651} else if(deriv_option>0) {
     652  for(uint_4 i=0;i<n-1;i++) (*v)(i) = vsave(i+1)-vsave(i);
     653  (*v)(n-1) = (*v)(n-2);
     654} else {
     655  for(uint_4 i=1;i<n-1;i++) (*v)(i) = (vsave(i+1)-vsave(i-1))/2.;
     656  (*v)(0)   = vsave(1)-vsave(0);
     657  (*v)(n-1) = vsave(n-1)-vsave(n-2);
     658}
    570659}
    571660
Note: See TracChangeset for help on using the changeset viewer.