Ok, after some silence on my log parsing attempts, here are the latest results. The C++ code is definitely not yet for public consumption (no interface at all), but if someone is interested let me know and I'll make it available.
The basic idea was: analyze a log file and extract two kind of information:
- hp dwell time for the tank
- damage/heal correlation
Problems first: as it turns out, it's not as easy as it seems. The logfile at times is non-causal, with weird contradictions which I've been unable to resolve. Manually, it would be possible, but procedurally.... I have no idea how to proceed. Since from the logfile I have no way to access the actual HP value for the tank (is this possible by coding an addon?) I use the heal+overheal events to resync my hp value to the maximum, but at times weird things happen. An example from a log:
t = 7/1 23:30:33.421: heal event (433, Judgement of Light from Paladin 1)
health transition from 34664/46000 to 35097/46000
t = 7/1 23:30:33.437: heal+overheal event (2091/1123, Living Seed from Druid 3)
health transition from 35097/46000 to 37188/46000 Overheal reported, but health < maxhealth??
health adjusted 37188 to 46000 (8812 / 8812)
t = 7/1 23:30:33.562: heal+overheal event (8812/1173, Nourish from Druid 3)
health transition from 46000/46000 to 54812/46000 OVER MAX HEALTH??
health adjusted 54812 to 46000 (-8812 / 0)
t = 7/1 23:30:34.062: damage event (-1581, Flame Jets from Ignis the Furnace Master)
health transition from 46000/46000 to 44419/46000
As you can see there are two consecutive heals which report heal+overheal, which is nonsensical since they occurr at two different times. I have no idea if this is related to lag across the clients and the server, with events being generated on one not necessairly able to see the others. Of course this may mess with the hp dwell time graph.
Another problem: I'm missing some healing. I trap the standard events, and I end up with some "positive correction" to be applied to the tank's health. The effect is not big, but, as above, it will mess up the hp dwell time graph. It must be some aura or something which is healing me and is not appearing in the logs. The value is too big for normal HP regeneration (for the fight below it's 11192 HP total in 6 mins).
One more problem: I have not found a way to compute the correlation among discrete events, so I transform the event sequence into a continuous function via interpolation. The question is: what kind of interpolation? Right now I'm using an ideal low-pass filter, which means sin(x)/x interpolation in time space (and a nice square function in frequency space). This explains why on the graphs you see negative healing or damage. BTW using a gaussian does not give very different results.
I'm now thinking about a different approach which consists in performing statistics on the heal events after the damage event, but I first need to get a clear idea of what I want and the some coding, so it'll not be for tomorrow
For the flashy graphics: here are the results from Ignis-25 (nice fight with no interruptions/phases). Healers are named Druid 1, Shaman 1, etc. Helistar (me) is the tank and the healing you see is ILotP. The % number is the % healed (to see for which ones looking at correlation is actually useful).
These are calculated with a 5 second filter cutoff (f_0 = 1/5 Hz).
In game time 5 seconds is quite long, so you get a general picture. The details can be seen by using a lower cutoff, here it's 1 second (i.e. 1 Hz):
You get a ton of "echo" due to the fact that damage (and healing) is roughly periodic (boss swing time).
If you want to see all the images, they are at:
Index of /wow/logparser/cutoff1sec
Index of /wow/logparser/cutoff5sec