_WPRTLINK Complex tan( const Complex &z ) { /****************************************/ // Tangent of a complex number. // From "Complex Variables and Applications" (pg. 51). // tan( z ) = sin( z ) / cos( z ) // = ((exp(iz) - exp(-iz))/2i)/((exp(iz) + exp(-iz))/2) // = (exp(iz) - exp(-iz))/(i*(exp(iz) + exp(-iz))) #if 0 dcomplex result; dcomplex exp_iz; dcomplex exp_neg_iz; exp_iz = CDEXP( z.imag(), -z.real() ); exp_neg_iz = C16Div( 1.0, 0.0, exp_iz.realpart, exp_iz.imagpart ); result = C16Div( exp_iz.realpart - exp_neg_iz.realpart, exp_iz.imagpart - exp_neg_iz.imagpart, exp_iz.imagpart + exp_neg_iz.imagpart, -(exp_iz.realpart + exp_neg_iz.realpart) ); Complex c_result( result.realpart, result.imagpart ); #elif 0 double sin_r; double cos_r; double exp_i; double sin_r_by_exp_i; double cos_r_by_exp_i; double sin_r_times_exp_i; double cos_r_times_exp_i; dcomplex result; sin_r = sin( z.real() ); cos_r = cos( z.real() ); exp_i = exp( z.imag() ); sin_r_by_exp_i = sin_r/exp_i; cos_r_by_exp_i = cos_r/exp_i; sin_r_times_exp_i = sin_r*exp_i; cos_r_times_exp_i = cos_r*exp_i; result = C16Div( cos_r_by_exp_i - cos_r_times_exp_i, sin_r_by_exp_i + sin_r_times_exp_i, -sin_r_by_exp_i + sin_r_times_exp_i, cos_r_by_exp_i + cos_r_times_exp_i ); Complex c_result( result.realpart, result.imagpart ); #endif // From Maple: // tan( a+ib ): // real part = sin(2a) / (cos(2a) + cosh(2b)) // imag part = sinh(2a) / (cos(2a) + cosh(2b)) double two_r; double two_i; double denom; two_r = z.real() * 2.0; two_i = z.imag() * 2.0; denom = cos( two_r ) + cosh( two_i ); return Complex( sin( two_r ) / denom, sinh( two_i ) / denom ); }
void MySelector::Terminate() { // The Terminate() function is the last function to be called // during a query. It always runs on the client, it can be used // to present the results graphically or save the results to // file. // finally, store all output TFile hfile("MySelector_Result.root","RECREATE","MuonResults"); fOutput->Write(); //Example to retrieve output from output list h_resistance= dynamic_cast<TH1F *>(fOutput->FindObject("resistance")); TCanvas c_result("cresult","Resistance",100,100,300,300); h_resistance->Draw(); c_result.SaveAs("ResistanceDistribution.png"); tNow.Set(); printf("*==* ---------- End of Job ---------- "); tNow.Print(); }