Changeset 1912 in Sophya for trunk/SophyaPI
- Timestamp:
- Feb 26, 2002, 6:31:27 PM (24 years ago)
- Location:
- trunk/SophyaPI/PIext
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaPI/PIext/pawexecut.cc
r1656 r1912 78 78 usage = "Integrate a 1D histogram"; 79 79 usage += "\n h/integ nameh1d [norm]"; 80 usage += "\n Related commands: h/deriv"; 80 usage += "\n norm<=0 means no normalisation (def norm=1)"; 81 usage += "\n Related commands: h/deriv v/integ v/deriv"; 82 piac->RegisterCommand(kw,usage,this,hgrp); 83 84 kw = "v/integ"; 85 usage = "Integrate a TVector"; 86 usage += "\n v/integ namevec [norm]"; 87 usage += "\n norm<=0 means no normalisation (def norm=0)"; 88 usage += "\n Related commands: h/integ h/deriv v/deriv"; 81 89 piac->RegisterCommand(kw,usage,this,hgrp); 82 90 … … 84 92 usage = "Derivate a 1D histogram"; 85 93 usage += "\n h/deriv nameh1d"; 86 usage += "\n Related commands: h/integ"; 94 usage += "\n Related commands: h/integ v/integ v/deriv"; 95 piac->RegisterCommand(kw,usage,this,hgrp); 96 97 kw = "v/deriv"; 98 usage = "Derivate a TVector"; 99 usage += "\n v/deriv namevec [deriv_option]"; 100 usage += "\n deriv_option -1 replace v[i] with v[i]-v[i-1]"; 101 usage += "\n 0 replace v[i] with (v[i+1]-v[i-1])/2 (default)"; 102 usage += "\n +1 replace v[i] with v[i+1]-v[i]"; 103 usage += "\n Related commands: h/integ h/deriv v/integ"; 87 104 piac->RegisterCommand(kw,usage,this,hgrp); 88 105 … … 214 231 } else if(kw == "h/integ") { 215 232 h_integ(tokens); return(0); 233 } else if(kw == "v/integ") { 234 v_integ(tokens); return(0); 216 235 } else if(kw == "h/deriv") { 217 236 h_deriv(tokens); return(0); 237 } else if(kw == "v/deriv") { 238 v_deriv(tokens); return(0); 218 239 } else if(kw == "h/rebin") { 219 240 h_rebin(tokens); return(0); … … 551 572 552 573 /* methode */ 574 void 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 { 579 if(tokens.size()<1) 580 {cout<<"Usage: v/integ namevec [norm]"<<endl; return;} 581 NamedObjMgr omg; 582 AnyDataObj* mobj = omg.GetObj(tokens[0]); 583 if(mobj==NULL) 584 {cout<<"PAWExecutor::v_integ Error: unknow object"<<tokens[0]<<endl; 585 return;} 586 r_8 norm=-1.; 587 if(tokens.size()>=2) norm = atof(tokens[1].c_str()); 588 TVector<r_8>* v = dynamic_cast<TVector<r_8>*>(mobj); 589 if(!v) 590 {cout<<"PAWExecutor::v_integ Error: "<<tokens[0]<<" not a TVector"<<endl; 591 return;} 592 uint_4 n = v->Size(); 593 if(n<=0) 594 {cout<<"PAWExecutor::v_integ Error: "<<tokens[0]<<" is an empty vector"<<endl; 595 return;} 596 if(n>1) for(uint_4 i=1;i<n;i++) (*v)(i)+=(*v)(i-1); 597 if(norm<=0. || (*v)(n-1)==0.) return; 598 norm /= (*v)(n-1); 599 for(int_4 i=0;i<n;i++) (*v)(i) *= norm; 600 } 601 602 /* methode */ 553 603 void PAWExecutor::h_deriv(vector<string>& tokens) 554 604 // Pour remplacer le contenu d'un histo 1D par sa derivee … … 568 618 return;} 569 619 h1->HDeriv(); 620 } 621 622 /* methode */ 623 void 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 { 629 if(tokens.size()<1) 630 {cout<<"Usage: v/deriv namevec [deriv_option(-1,0,+1)]"<<endl; return;} 631 NamedObjMgr omg; 632 AnyDataObj* mobj = omg.GetObj(tokens[0]); 633 if(mobj==NULL) 634 {cout<<"PAWExecutor::v_deriv Error: unknow object"<<tokens[0]<<endl; 635 return;} 636 int_4 deriv_option = 0; 637 if(tokens.size()>=2) deriv_option = atoi(tokens[1].c_str()); 638 TVector<r_8>* v = dynamic_cast<TVector<r_8>*>(mobj); 639 if(!v) 640 {cout<<"PAWExecutor::v_deriv Error: "<<tokens[0]<<" not a TVector"<<endl; 641 return;} 642 uint_4 n = v->Size(); 643 if(n<=0) 644 {cout<<"PAWExecutor::v_deriv Error: "<<tokens[0]<<" is an empty vector"<<endl; 645 return;} 646 if(n<=1) return; 647 TVector<r_8> vsave(*v,false); 648 if(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 } 570 659 } 571 660 -
trunk/SophyaPI/PIext/pawexecut.h
r1268 r1912 25 25 void n_scan(vector<string>& tokens); 26 26 void h_integ(vector<string>& tokens); 27 void v_integ(vector<string>& tokens); 27 28 void h_deriv(vector<string>& tokens); 29 void v_deriv(vector<string>& tokens); 28 30 void h_rebin(vector<string>& tokens); 29 31 void h_cadd(vector<string>& tokens);
Note:
See TracChangeset
for help on using the changeset viewer.