#include "IFieldPlotter.hxx" #include "IFieldManager.hxx" #include #include #include #include namespace { std::ostream& operator<<(std::ostream& stream,const TVector3& vect){ stream<<"("<cd(); else if(fDirectory) fDirectory->cd(); COMET::IFieldManager* theGlobalField = COMET::IFieldManager::getObject(); double limit_side=fNSteps*fStepSide; double limit_up=fNSteps*fStepUp; std::stringstream x_axis; x_axis<<"Distance along "<GetFieldValue(point,field_vectors); TVector3 field(field_vectors[0],field_vectors[1],field_vectors[2]); hMagnitude->Fill(dist_side,dist_up,field.Mag()); hUpwards->Fill(dist_side,dist_up,field.Dot(fDirUp)); hSideways->Fill(dist_side,dist_up,field.Dot(fDirSide)); hOutwards->Fill(dist_side,dist_up,field.Dot(fDirOut)); } } oldwd->cd(); return true; } bool COMET::IFieldPlotter::PlotPlanes(int n_planes,double plane_sep){ double start_depth=(n_planes-1)*0.5*plane_sep; int start=(n_planes-1)*0.5; int stop=start + (n_planes+1)%2; TVector3 orig_origin=fOrigin; fOrigin-=start_depth*fDirOut; for(int i_plane=-start;i_plane<=stop; ++i_plane){ // create a name for the plane std::string slice_name=Form("slice_%g_%g_%g",fOrigin.x(),fOrigin.y(),fOrigin.z()); TDirectory* dir=fDirectory->mkdir(slice_name.c_str()); COMETNamedLog("IFieldPlotter","Running on plane ("<