[Cdk-user] ?????? Questions about the function "Addring"

2019-11-26 Thread ????????
Thank you for your reply.
I'm sorry for being busy with the project lately and not responding to this 
letter in time.


If I understand correctly, this change is to solve the problem that the new 
ring cannot be added when the degree of sharedAtoms == 4 (already symmetrical 
layout).
Perhaps the difference between the usage of C # code and Java caused the wrong 
result when NCDK ported from the CDK code.
And I will be continue to look for syntax errors.


All the best.




----
??:"John Mayfield"https://github.com/cdk/cdk/commit/6533533a95b5e9ca0d55d0d37ab5f048a25e88f7#diff-da65f1759b150e9510a643e017112b3f


And see how it lays out the following.


C1CO[Fe]234(O1)OCCO2.C(CO3)O4









The old code would generate this:







because the bond vector was pointing towards the centre of the ring.


John


On Wed, 20 Nov 2019 at 16:36, Christoph Steinbeck 
http://cheminf.uni-jena.de
 http://orcid.org/-0001-6966-0814
 
 What is man but that lofty spirit - that sense of enterprise.
 ... Kirk, "I, Mudd," stardate 4513.3..
 
  On 18. Nov 2019, at 16:24,  <843982...@qq.com wrote:
  
  Thanks for your reply.
  I want to implement a JChemPaint in C#. In fact, I used a CDK port, named 
NCDK which is C# impementation implementation of the Chemistry Development 
Kit. https://github.com/kazuyaujihara/NCDK.
  But I have got some bugs. I want to read the source code of CDK and fix 
it.
  The bug is like this:
  When we addRing, we need to calculate the position of the virtual ring. 
From the code , I understand that the position of the new ring need to be 
calculated by some variables, include the new ring center, startAngle, 
addAngle, radius.
  The code in function "placeSpiroRing" is
  atomPlacer.populatePolygonCorners(atomsToDraw, ringCenter, startAngle, 
addAngle, radius);
  The variable ringCenter is dependent on the variable ringCenterVector 
which is a vector pointing the the center of the new ring.
  
  For example, when I want to add a triangle to a shared atom, It satisfies 
numplace==2.It seems that the sharedAtom' s position will be changed.
  The code in function "placeSpiroRing" is
  if (numPlaced == 2) {
 // nudge the 
shared atom such that bond lengths will be
 // equal
 
startAtom.getPoint2d().add(ringCenterVector);
 
sharedAtomsCenter.add(ringCenterVector);
   }
  And when degree == 4 and degree != 4, ringCenterVector is differently 
recalculate. Why?
  The code in function "placeSpiroRing" is
  if (degree == 4) {
   
ringCenterVector.normalize();
   
ringCenterVector.scale(radius);
 } else {
   // spread things out a 
little for multiple spiro centres
   
ringCenterVector.normalize();
   
ringCenterVector.scale(2*radius);
 }
  I'm confused. Or I understand it wrong.
  
  Thank you for taking your time to read this letter again.
  
  --  --
  ??: "Christoph Steinbeck"http://cheminf.uni-jena.de
  http://orcid.org/-0001-6966-0814
  
  What is man but that lofty spirit - that sense of enterprise.
  ... Kirk, "I, Mudd," stardate 4513.3..
  
   On 18. Nov 2019, at 11:32,  <843982...@qq.com wrote:
   
   Dear all,
i want to understand how to add rings in the 
atom.In the function "Addring",I find the code "ringPlacer.PlaceSpiroRing" and 
then jump to the function "placeSpiroRing".And I have some problems about this 
function.Why do we have special treatment when degree==4 and numplace==2? In my 
understanding, "degree" is the number of bonds connected to sharedAtoms, and 
numPlaced is the number of other Atoms ring except sharedAtoms.
Looking forward to your reply. Thank you!
   
   The source code from CDK is here??
   public void placeSpiroRing(IRing ring, IAtomContainer sharedAtoms, 
Point2d sharedAtomsCenter, Vector2d ringCenterVector, double bondLength) {
   
  IAtom startAtom = 
sharedAtoms.getAtom(0);
  Listhttps://lists.sourceforge.net/lists/listinfo/cdk-user
  
  
  ___
  Cdk-user mailing list
  Cdk-user@lists.sourceforge.net
  https://lists.sourceforge.net/lists/listinfo/cdk-user
 
 
 
 ___
 Cdk-user mailing list
 Cdk-user@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/cdk-user___
Cdk-user mailing list
Cdk-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/cdk-user


Re: [Cdk-user] Questions about the function "Addring"

2019-11-20 Thread John Mayfield
It's calculated differently because without it the rings get laid out on
top of each other. Example case, you can reverse this commit:

https://github.com/cdk/cdk/commit/6533533a95b5e9ca0d55d0d37ab5f048a25e88f7#diff-da65f1759b150e9510a643e017112b3f

And see how it lays out the following.

C1CO[Fe]234(O1)OCCO2.C(CO3)O4

[image: image.png]

The old code would generate this:

[image: image.png]

because the bond vector was pointing towards the centre of the ring.

John

On Wed, 20 Nov 2019 at 16:36, Christoph Steinbeck <
christoph.steinb...@uni-jena.de> wrote:

> This is very old code and it seem that others changed it (to the better
> :)) since I wrote it long time ago.
> If I understand you correctly, there is actually no bug, just an apparent
> inconsistency that you are reporting.
> The simplest thing would be for you to remove the case distinction and see
> what happens.
> Maybe that reveals the reason for the distinction.
>
> I’d love to dig into this but I lack the time for such fun these days
> Very sad. :D
>
> All the best,
>
> Chris
>
> —
> Prof. Dr. Christoph Steinbeck
> Analytical Chemistry - Cheminformatics and Chemometrics
> Friedrich-Schiller-University Jena, Germany
> Phone Secretariat: +49-3641-948171
> http://cheminf.uni-jena.de
> http://orcid.org/-0001-6966-0814
>
> What is man but that lofty spirit - that sense of enterprise.
> ... Kirk, "I, Mudd," stardate 4513.3..
>
> > On 18. Nov 2019, at 16:24, 努力努力 <843982...@qq.com> wrote:
> >
> > Thanks for your reply.
> > I want to implement a JChemPaint in C#. In fact, I used a CDK port,
> named NCDK which is C# impementation implementation of the Chemistry
> Development Kit.  https://github.com/kazuyaujihara/NCDK.
> > But I have got some bugs. I want to read the source code of CDK and fix
> it.
> > The bug is like this:
> > When we addRing, we need to calculate the position of the virtual ring.
> From the code , I understand that the position of the new ring need to be
> calculated by some variables, include the new ring center, startAngle,
> addAngle, radius.
> > The code in function "placeSpiroRing" is
> > atomPlacer.populatePolygonCorners(atomsToDraw, ringCenter, startAngle,
> addAngle, radius);
> > The variable ringCenter is dependent on the variable ringCenterVector
> which is a vector pointing the the center of the new ring.
> >
> > For example, when I want to add a triangle to a shared atom, It
> satisfies numplace==2.It seems that the sharedAtom' s position will be
> changed.
> > The code in function "placeSpiroRing" is
> > if (numPlaced == 2) {
> > // nudge the shared atom such that bond lengths will be
> > // equal
> > startAtom.getPoint2d().add(ringCenterVector);
> > sharedAtomsCenter.add(ringCenterVector);
> > }
> > And when degree == 4 and degree != 4, ringCenterVector is differently
> recalculate. Why?
> > The code in function "placeSpiroRing" is
> > if (degree == 4) {
> > ringCenterVector.normalize();
> > ringCenterVector.scale(radius);
> > } else {
> > // spread things out a little for multiple spiro centres
> > ringCenterVector.normalize();
> > ringCenterVector.scale(2*radius);
> >     }
> > I'm confused. Or I understand it wrong.
> >
> > Thank you for taking your time to read this letter again.
> >
> > -- 原始邮件 --
> > 发件人: "Christoph Steinbeck";
> > 发送时间: 2019年11月18日(星期一) 晚上6:55
> > 收件人: "努力努力"<843982...@qq.com>;
> > 抄送: "cdk-user";
> > 主题: Re: [Cdk-user] Questions about the function "Addring"
> >
> > Can you comment on what you try to achieve?
> > The method that you are referring to is a quite specialised method for
> structure diagram layout.
> > Are you trying to create 2D drawings of some molecule or fragment, or
> maybe something else?
> >
> > Kind regards,   Chris
> >
> > —
> > Prof. Dr. Christoph Steinbeck
> > Analytical Chemistry - Cheminformatics and Chemometrics
> > Friedrich-Schiller-University Jena, Germany
> > Phone Secretariat: +49-3641-948171
> > http://cheminf.uni-jena.de
> > http://orcid.org/-0001-6966-0814
> >
> > What is man but that lofty spirit - that sense of enterprise.
> > ... Kirk, "I, Mudd," stardate 4513.3..
> >
> > > On 18. Nov 2019, at 11:32, 努力努力 <843982...@qq.com> wrote:
> > >
> > > Dear all,
> > > i wan

Re: [Cdk-user] Questions about the function "Addring"

2019-11-20 Thread Christoph Steinbeck
This is very old code and it seem that others changed it (to the better :)) 
since I wrote it long time ago.
If I understand you correctly, there is actually no bug, just an apparent 
inconsistency that you are reporting. 
The simplest thing would be for you to remove the case distinction and see what 
happens. 
Maybe that reveals the reason for the distinction.

I’d love to dig into this but I lack the time for such fun these days 
Very sad. :D

All the best, 

Chris

— 
Prof. Dr. Christoph Steinbeck
Analytical Chemistry - Cheminformatics and Chemometrics
Friedrich-Schiller-University Jena, Germany
Phone Secretariat: +49-3641-948171
http://cheminf.uni-jena.de
http://orcid.org/-0001-6966-0814

What is man but that lofty spirit - that sense of enterprise.
... Kirk, "I, Mudd," stardate 4513.3..

> On 18. Nov 2019, at 16:24, 努力努力 <843982...@qq.com> wrote:
> 
> Thanks for your reply.
> I want to implement a JChemPaint in C#. In fact, I used a CDK port, named 
> NCDK which is C# impementation implementation of the Chemistry Development 
> Kit.  https://github.com/kazuyaujihara/NCDK.
> But I have got some bugs. I want to read the source code of CDK and fix it.
> The bug is like this:
> When we addRing, we need to calculate the position of the virtual ring. From 
> the code , I understand that the position of the new ring need to be 
> calculated by some variables, include the new ring center, startAngle, 
> addAngle, radius.
> The code in function "placeSpiroRing" is
> atomPlacer.populatePolygonCorners(atomsToDraw, ringCenter, startAngle, 
> addAngle, radius);
> The variable ringCenter is dependent on the variable ringCenterVector which 
> is a vector pointing the the center of the new ring.
> 
> For example, when I want to add a triangle to a shared atom, It satisfies 
> numplace==2.It seems that the sharedAtom' s position will be changed.
> The code in function "placeSpiroRing" is
> if (numPlaced == 2) {
> // nudge the shared atom such that bond lengths will be
> // equal
> startAtom.getPoint2d().add(ringCenterVector);
> sharedAtomsCenter.add(ringCenterVector);
> }
> And when degree == 4 and degree != 4, ringCenterVector is differently 
> recalculate. Why?
> The code in function "placeSpiroRing" is
> if (degree == 4) {
> ringCenterVector.normalize();
> ringCenterVector.scale(radius);
> } else {
> // spread things out a little for multiple spiro centres
> ringCenterVector.normalize();
> ringCenterVector.scale(2*radius);
> }
> I'm confused. Or I understand it wrong.
> 
> Thank you for taking your time to read this letter again.
> 
> ------ 原始邮件 ----------
> 发件人: "Christoph Steinbeck";
> 发送时间: 2019年11月18日(星期一) 晚上6:55
> 收件人: "努力努力"<843982...@qq.com>;
> 抄送: "cdk-user";
> 主题: Re: [Cdk-user] Questions about the function "Addring"
> 
> Can you comment on what you try to achieve?
> The method that you are referring to is a quite specialised method for 
> structure diagram layout. 
> Are you trying to create 2D drawings of some molecule or fragment, or maybe 
> something else?
> 
> Kind regards,   Chris
> 
> — 
> Prof. Dr. Christoph Steinbeck
> Analytical Chemistry - Cheminformatics and Chemometrics
> Friedrich-Schiller-University Jena, Germany
> Phone Secretariat: +49-3641-948171
> http://cheminf.uni-jena.de
> http://orcid.org/-0001-6966-0814
> 
> What is man but that lofty spirit - that sense of enterprise.
> ... Kirk, "I, Mudd," stardate 4513.3..
> 
> > On 18. Nov 2019, at 11:32, 努力努力 <843982...@qq.com> wrote:
> > 
> > Dear all,
> > i want to understand how to add rings in the atom.In the function 
> > "Addring",I find the code "ringPlacer.PlaceSpiroRing" and then jump to the 
> > function "placeSpiroRing".And I have some problems about this function.Why 
> > do we have special treatment when degree==4 and numplace==2? In my 
> > understanding, "degree" is the number of bonds connected to sharedAtoms, 
> > and numPlaced is the number of other Atoms ring except sharedAtoms.
> > Looking forward to your reply. Thank you!
> > 
> > The source code from CDK is here:
> > public void placeSpiroRing(IRing ring, IAtomContainer sharedAtoms, Point2d 
> > sharedAtomsCenter, Vector2d ringCenterVector, double bondLength) {
> > 
> > IAtom startAtom = sharedAtoms.getAtom(0);
> > List mBonds = 
> > molecule.getConnectedBondsList(sharedAtoms.getAtom(0));
> 

[Cdk-user] ?????? Questions about the function "Addring"

2019-11-18 Thread ????????
Thanks for your reply.
I want to implement a JChemPaint in C#. In fact, I used a CDK port, named NCDK 
which is C# impementation implementation of the Chemistry Development 
Kit. https://github.com/kazuyaujihara/NCDK. 
But I have got some bugs. I want to read the source code of CDK and fix it.
The bug is like this:
When we addRing, we need to calculate the position of the virtual ring. From 
the code , I understand that the position of the new ring need to be calculated 
by some variables, include the new ring center, startAngle, addAngle, radius.
The code in function "placeSpiroRing" is 
atomPlacer.populatePolygonCorners(atomsToDraw, ringCenter, startAngle, 
addAngle, radius);The variable ringCenter is dependent on the variable 
ringCenterVector which is a vector pointing the the center of the new ring. 


For example, when I want to add a triangle to a shared atom, It satisfies 
numplace==2.It seems that the sharedAtom' s position will be changed.

The code in function "placeSpiroRing" is 

if (numPlaced == 2) {// 
nudge the shared atom such that bond lengths will be
// equal

startAtom.getPoint2d().add(ringCenterVector);

sharedAtomsCenter.add(ringCenterVector);
  }

And when degree == 4 and degree != 4, ringCenterVector is differently 
recalculate. Why? 
The code in function "placeSpiroRing" is 
if (degree == 4) {  
ringCenterVector.normalize();
  ringCenterVector.scale(radius);
} else {
  // spread things out a little for 
multiple spiro centres
  ringCenterVector.normalize();
  ringCenterVector.scale(2*radius);
}

I'm confused. Or I understand it wrong.


Thank you for taking your time to read this letter again.


--  --
??:"Christoph Steinbeck"http://cheminf.uni-jena.de
http://orcid.org/-0001-6966-0814

What is man but that lofty spirit - that sense of enterprise.
... Kirk, "I, Mudd," stardate 4513.3..

 On 18. Nov 2019, at 11:32,  <843982...@qq.com wrote:
 
 Dear all,
  i want to understand how to add rings in the atom.In 
the function "Addring",I find the code "ringPlacer.PlaceSpiroRing" and then 
jump to the function "placeSpiroRing".And I have some problems about this 
function.Why do we have special treatment when degree==4 and numplace==2? In my 
understanding, "degree" is the number of bonds connected to sharedAtoms, and 
numPlaced is the number of other Atoms ring except sharedAtoms.
  Looking forward to your reply. Thank you!
 
 The source code from CDK is here??
 public void placeSpiroRing(IRing ring, IAtomContainer sharedAtoms, Point2d 
sharedAtomsCenter, Vector2d ringCenterVector, double bondLength) {
 
  IAtom startAtom = 
sharedAtoms.getAtom(0);
  Listhttps://lists.sourceforge.net/lists/listinfo/cdk-user___
Cdk-user mailing list
Cdk-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/cdk-user


Re: [Cdk-user] Questions about the function "Addring"

2019-11-18 Thread Christoph Steinbeck
Can you comment on what you try to achieve?
The method that you are referring to is a quite specialised method for 
structure diagram layout. 
Are you trying to create 2D drawings of some molecule or fragment, or maybe 
something else?

Kind regards,   Chris

— 
Prof. Dr. Christoph Steinbeck
Analytical Chemistry - Cheminformatics and Chemometrics
Friedrich-Schiller-University Jena, Germany
Phone Secretariat: +49-3641-948171
http://cheminf.uni-jena.de
http://orcid.org/-0001-6966-0814

What is man but that lofty spirit - that sense of enterprise.
... Kirk, "I, Mudd," stardate 4513.3..

> On 18. Nov 2019, at 11:32, 努力努力 <843982...@qq.com> wrote:
> 
> Dear all,
> i want to understand how to add rings in the atom.In the function 
> "Addring",I find the code "ringPlacer.PlaceSpiroRing" and then jump to the 
> function "placeSpiroRing".And I have some problems about this function.Why do 
> we have special treatment when degree==4 and numplace==2? In my 
> understanding, "degree" is the number of bonds connected to sharedAtoms, and 
> numPlaced is the number of other Atoms ring except sharedAtoms.
> Looking forward to your reply. Thank you!
> 
> The source code from CDK is here:
> public void placeSpiroRing(IRing ring, IAtomContainer sharedAtoms, Point2d 
> sharedAtomsCenter, Vector2d ringCenterVector, double bondLength) {
> 
> IAtom startAtom = sharedAtoms.getAtom(0);
> List mBonds = 
> molecule.getConnectedBondsList(sharedAtoms.getAtom(0));
> final int degree = mBonds.size();
> logger.debug("placeSpiroRing: D=", degree);
> 
> // recalculate the ringCentreVector
> if (degree != 4) {
> 
> int numPlaced = 0;
> for (IBond bond : mBonds) {
> IAtom nbr = bond.getOther(sharedAtoms.getAtom(0));
> if (!nbr.getFlag(CDKConstants.ISPLACED))
> continue;
> numPlaced++;
> }
> 
> if (numPlaced == 2) {
> // nudge the shared atom such that bond lengths will be
> // equal
> startAtom.getPoint2d().add(ringCenterVector);
> sharedAtomsCenter.add(ringCenterVector);
> }
> 
> double theta = Math.PI-(2 * Math.PI / (degree / 2));
> rotate(ringCenterVector, theta);
> }
> 
> double radius = getNativeRingRadius(ring, bondLength);
> Point2d ringCenter = new Point2d(sharedAtomsCenter);
> if (degree == 4) {
> ringCenterVector.normalize();
> ringCenterVector.scale(radius);
> } else {
> // spread things out a little for multiple spiro centres
> ringCenterVector.normalize();
> ringCenterVector.scale(2*radius);
> }
> ringCenter.add(ringCenterVector);
> double addAngle = 2 * Math.PI / ring.getRingSize();
> 
> IAtom currentAtom = startAtom;
> double startAngle = GeometryUtil.getAngle(startAtom.getPoint2d().x - 
> ringCenter.x,
>   startAtom.getPoint2d().y - 
> ringCenter.y);
> 
> /*
>  * Get one bond connected to the spiro bridge atom. It doesn't matter 
> in
>  * which direction we draw.
>  */
> List rBonds = ring.getConnectedBondsList(startAtom);
> 
> IBond currentBond = (IBond) rBonds.get(0);
> 
> Vector atomsToDraw = new Vector();
> /*
>  * Store all atoms to draw in consequtive order relative to the chosen
>  * bond.
>  */
> for (int i = 0; i < ring.getBondCount(); i++) {
> currentBond = ring.getNextBond(currentBond, currentAtom);
> currentAtom = currentBond.getOther(currentAtom);
> if (!currentAtom.equals(startAtom))
> atomsToDraw.addElement(currentAtom);
> }
> logger.debug("currentAtom  " + currentAtom);
> logger.debug("startAtom  " + startAtom);
> 
> atomPlacer.populatePolygonCorners(atomsToDraw, ringCenter, 
> startAngle, addAngle, radius);
> 
> }


RingPlacer.java
Description: Binary data
> ___
> Cdk-user mailing list
> Cdk-user@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/cdk-user

___
Cdk-user mailing list
Cdk-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/cdk-user


[Cdk-user] Questions about the function "Addring"

2019-11-18 Thread ????????
Dear all,
  i want to understand how to add rings in the atom.In the function 
"Addring",I find the code "ringPlacer.PlaceSpiroRing" and then jump to the 
function "placeSpiroRing".And I have some problems about this function.Why do 
we have special treatment when degree==4 and numplace==2? In my understanding, 
"degree" is the number of bonds connected to sharedAtoms, and numPlaced is the 
number of other Atoms ring except sharedAtoms.
  Looking forward to your reply. Thank you!


The source code from CDK is here??
public void placeSpiroRing(IRing ring, IAtomContainer sharedAtoms, Point2d 
sharedAtomsCenter, Vector2d ringCenterVector, double bondLength) {



IAtom startAtom = sharedAtoms.getAtom(0);
List

RingPlacer.java
Description: Binary data
___
Cdk-user mailing list
Cdk-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/cdk-user