00001
00002
00003
00004
00005
00006
00007 #ifndef BALL_COMMON_H
00008 # include <BALL/common.h>
00009 #endif
00010
00011 #ifndef BALL_KERNEL_EXPRESSION_H
00012 # include <BALL/KERNEL/expression.h>
00013 #endif
00014
00015 #ifndef BALL_NMR_SHIFTMODULE_H
00016 # include <BALL/NMR/shiftModule.h>
00017 #endif
00018
00019 #ifndef BALL_DATATYPE_STRINGHASHMAP_H
00020 # include <BALL/DATATYPE/stringHashMap.h>
00021 #endif
00022
00023 #ifndef BALL_FORMAT_PARAMETERS_H
00024 # include <BALL/FORMAT/parameters.h>
00025 #endif
00026
00027 #ifndef BALL_FORMAT_PARAMETERSECTION_H
00028 # include <BALL/FORMAT/parameterSection.h>
00029 #endif
00030
00031 #include <list>
00032
00033 namespace BALL
00034 {
00038 class BALL_EXPORT JohnsonBoveyShiftProcessor
00039 : public ShiftModule
00040 {
00041 public:
00042
00043 BALL_CREATE(JohnsonBoveyShiftProcessor)
00044
00045
00048
00050 struct BALL_EXPORT Ring
00051 {
00052 double radius;
00053 double intensity;
00054 Size electrons;
00055 std::vector<String> atom_names;
00056
00057 bool operator == (const Ring& ring) const;
00058 bool operator != (const Ring& ring) const { return !(*this == ring);}
00059 } ;
00060
00062
00066
00070 static const char* PROPERTY__RING_CURRENT_SHIFT;
00072
00073
00077
00080 JohnsonBoveyShiftProcessor();
00081
00084 virtual ~JohnsonBoveyShiftProcessor();
00085
00087
00090
00093 virtual bool start();
00094
00097 virtual bool finish();
00098
00101 virtual Processor::Result operator () (Composite& composite);
00102
00104
00107
00110 virtual void init();
00111
00113
00114 protected:
00115
00116 std::list<Atom*> proton_list_;
00117 std::list<Atom*> atom_list_;
00118 std::list<Residue*> aromat_list_;
00119 StringHashMap<Ring> rings_;
00120 StringHashMap<Position> residues_with_rings_;
00121 std::vector<Expression> expressions_;
00122
00123 double carlsonEllipticalIntegral1_(double, double, double);
00124 double carlsonEllipticalIntegral2_(double, double, double);
00125 double legendreEllipticalIntegral1_(double, double);
00126 double legendreEllipticalIntegral2_(double, double);
00127 };
00128
00129 }