__color__,ticket,summary,component,milestone,type,owner,priority,created,status,_changetime,_description,_reporter 1,2,Create sodar package,sodar,sodar-1.0,task,cbc,blocker,1181572439,closed,1185154419,Create a sodar package. No functionality. Just a blank slate.,cbc 3,3,Add test framework,sodar,sodar-1.0,enhancement,cbc *,major,1181589537,assigned,1181589935,Add a unittest based framework.,cbc 3,5,Add class to split daily file into samples,sodar,sodar-1.0,task,cbc,major,1184015947,closed,1184018784,Ingest a daily file as a string and create multiple objects representing the fifteen minute samples.,cbc 3,6,Add classes to split daily file samples into headers and bodies,sodar,sodar-1.0,task,cbc,major,1184087997,closed,1185154815,The __init__ method of each sodar.Data object should be augmented to generate instances of two new objects: Header and Body_ representing the respective sections of each daily file sample.,cbc 3,7,Add deep copy funtionality to Data class,sodar,sodar-1.0,task,cbc,major,1187622938,closed,1187636429,Requires __deepcopy__ in Body_ Header_ and Sample classes.,cbc 3,8,Add string to float and NaN conversion to Data class,sodar,sodar-1.0,task,cbc,major,1187623091,closed,1187636451,Create structures to put data in numeric format and correct for invalid values.,cbc 3,9,Compute sample time interval,sodar,sodar-1.0,task,cbc,major,1187623798,closed,1187642485,Difference adjacent sample times. Accumulate discreet difference totals. Take vote of most likely sample time from totals.,cbc 3,10,Correct for missing samples,sodar,sodar-1.0,task,cbc *,major,1187623904,assigned,1187645854,Fill in Data copy with !NaNs for missing samples.,cbc 3,11,Compute minimum altitude,sodar,sodar-1.0,task,cbc,major,1187624015,closed,1187651989,Accumulate totals of discreet minimum altitude across all samples. Take vote of most likely min altitude from totals.,cbc 3,12,Compute maximum overall altitude,sodar,sodar-1.0,task,cbc,major,1187624163,closed,1187887607,Compute maximum altitude across all samples by accumulating stats.,cbc 3,13,Compute number of altitudes,sodar,sodar-1.0,task,cbc,major,1187624391,closed,1190140646,Accumulate number of altitudes across all samples and vote on most popular.,cbc 3,14,Compute altitude interval,sodar,sodar-1.0,task,cbc,major,1187624475,closed,1190141432,Determine altitude interval from min alt_ max alt_ and number of alts.,cbc 3,15,Correct for missing altitudes,sodar,sodar-1.0,task,cbc *,major,1187624603,assigned,1187624609,Fix up data copies for missing altitudes so that arrays are orthogonal.,cbc 3,16,Mark the maximum altitude with good data for each sample,sodar,sodar-1.0,task,cbc *,major,1187625199,assigned,1187625214,...and find the minimum of those maximums across all samples.,cbc 3,17,Mark the minimum altitude with good data for each sample,sodar,sodar-1.0,task,cbc *,major,1187625334,assigned,1187625351,...and find maximum of those minimums across all samples.,cbc 3,18,Convert directions to radian,sodar,sodar-1.0,task,cbc,major,1187625470,closed,1190141466,Original direction is in degrees CW from North.,cbc 3,19,Construct colorspec for c matrix,sodar,sodar-1.0,task,cbc *,major,1187625574,assigned,1187625706,Convert speed to matplotlib colorspec.,cbc 3,20,Compute u_ v arrays,sodar,sodar-1.0,task,cbc,major,1187625663,closed,1190146265,Using speed and direction normalized to one.,cbc 3,21,Move array normalization methods to new ProcessedData class,sodar,sodar-1.0,task,cbc,major,1189007282,closed,1189034043,Create a !ProcessedData class which takes a Data instance as an argument for initialization. Rename the Data class to !RawData. Move methods associated with normalizing data samples and creating an array suitable for plotting to the !ProcessedData class. Instances of !ProcessedData will be fed to plotting methods rather than instances of the !RawData class. This preserves the easy semantics for accessing raw data in !RawData instances and separates them from the semantics for manipulating the processed data attributes of the !ProcessedData class. The !ProcessedData class also has the added constraint of requiring an array library which the !RawData class doesn't need.,cbc 3,22,Add ArrayData class,sodar,sodar-1.0,task,cbc,major,1190140405,closed,1190141494,Rename !ProcessedData as !FormattedData. Factor formattedData.py to create a new class !ArrayData in its own module.,cbc 4,4,Add setup.py,sodar,sodar-1.0,enhancement,cbc,minor,1181589614,closed,1206453733,Add a distutils based installation mechanism.,cbc