Ejemplo n.º 1
0
        // Constructor given a file (pass by reference!)
        public fileHandler(ref System.IO.StreamReader myFile, string myFileName)
        {
            //*************************************//
            // Metadata format
            // ---------------
            //
            // "Spectroscopy data file"
            // date
            // "Trap frequency:"
            // trapFrequency
            // "Trap voltage:"
            // trapVoltage
            // "AOM Start frequency:"
            // startFrequency
            // "Step size:"
            // stepSize
            // "Number of repeats per frequency:"
            // repeats
            // "File contains interleaved spectra:"
            // numberInterleaved
            // "This is sideband:"
            // sidebandNumber
            // "Starting pulse length (fixed):"
            // startLength
            // "Number of steps (fixed):"
            // numberOfSteps (fixed)
            // "Spectrum i name":
            // spectrumName[i]
            // "Notes:"
            // Notes section - all lines should start with a #
            // "Data:"


            // Two "name" labels - one in file, one for displaying on graph
            // Name spectra on creation rather than when loading file?
            // Include notes section - parse & display in a window

            //*************************************//

            // String to temporarily store data from the file
            string myString = myFile.ReadLine();              // Read first line of file

            // Make sure it is a valid data file - check for metadata
            if (myString == "Spectroscopy data file")
            {
                //******************************//
                // Processing metadata
                // Just dump it into an array of strings

                metadata = new string[25];

                // Next 36 lines are misc metadata with titles
                for (int i = 0; i < 18; i++)
                {
                    metadata[i] = myFile.ReadLine();               // First line is actual metadata
                    myString    = myFile.ReadLine();               // Alternating lines are just a title (throw away)
                }

                float stepSizekHz, startFrequencyMHz;

                // Store crucial metadata - no. of repeats, no. interleaved, step size, start freq
                // int.TryParse(myString, out myInt) converts myString to an int and stores it in myInt
                // then returns true if it was successful, false otherwise

                if (int.TryParse(metadata[13], out repeats) && int.TryParse(metadata[14], out numberInterleaved) &&
                    float.TryParse(metadata[9], out stepSizekHz) && float.TryParse(metadata[7], out startFrequencyMHz))
                {
                    if (metadata[1] == "Fixed")
                    {
                        // Make sure starting pulse length is an int
                        if (int.TryParse(metadata[16], out startLength))
                        {
                            // Don't convert - this is a number of ticks
                            stepSize = (int)stepSizekHz;
                        }
                        else
                        {
                            MessageBox.Show("Error reading metadata (pulse length not an int)");
                        }
                    }
                    else
                    {
                        // These need converting to Hz and storing as ints
                        stepSize = (int)(stepSizekHz * 1000);
                    }
                    // Always convert start freq to int
                    startFrequency = (int)(startFrequencyMHz * 1000000);
                }
                else
                {
                    MessageBox.Show("Error reading metadata");
                }

                spectrumNames = new string[numberInterleaved];

                // Depending on number of interleaved spectra, store the names in the array
                for (int i = 0; i < numberInterleaved; i++)
                {
                    if (i < 5) // Make sure we don't take more than 5 spectra from file
                    {
                        // Put spectrum name into arrays for both metadata and spectrumNames
                        // ( Need spectrumNames for spectrumSelect dialog)
                        // Bit messy but it's easiest to code this way for now, maybe tidy later
                        // using substrings
                        spectrumNames[i] = myFile.ReadLine();
                        metadata[i + 18] = spectrumNames[i];
                        myString         = myFile.ReadLine();
                    }
                }



                myString = myFile.ReadLine();               // Read first line of notes section
                // Keep reading lines while each line begins with a #
                while (myString[0] == '#')
                {
                    notes   += myString.Substring(1);
                    notes   += System.Environment.NewLine;
                    myString = myFile.ReadLine();
                }


                // NB this will read one line PAST the end of the notes section. This should be the line that says "Data:"
                // Check this - if not then there will be errors reading the data
                if (myString != "Data:")
                {
                    MessageBox.Show("Error: File corrupted (wrong metadata format?)");
                    return;
                }

                // Store in array of metadata
                if (18 + numberInterleaved < 25 && numberInterleaved != 0)
                {
                    metadata[18 + numberInterleaved] = notes;
                }
                else
                {
                    Console.WriteLine("Too many interleaved spectra - gone beyond the bounds of metadata array (line 184 fileHandler.cs)");
                }

                // Process the actual numerical data
                this.processData(ref myFile);
            }   // If there is no metadata
            else if (myString == "Spectroscopy data file (no metadata)")
            {
                // Open a form requesting metadata (start freq, repeats, step size, number of spectra)
                // & wait for it to be closed before continuing
                requestMetadata myRequestMetadata = new requestMetadata(ref myFileName);
                myRequestMetadata.ShowDialog();

                // Check that user has pressed ok
                if (myRequestMetadata.DialogResult == DialogResult.OK)
                {
                    // Set metadata from user input on form
                    startFrequency    = myRequestMetadata.startFreq;
                    stepSize          = myRequestMetadata.stepSize;
                    repeats           = myRequestMetadata.repeats;
                    numberInterleaved = myRequestMetadata.numberInterleaved;

                    // Need to initialise this array
                    spectrumNames = new string[numberInterleaved];
                    for (int i = 0; i < numberInterleaved; i++)
                    {
                        spectrumNames[i] = "Default";

                        // Make sure we are not outside the bounds of the array
                        if (i + 18 < 24)
                        {
                            // Store default name in metadata
                            metadata[i + 18] = spectrumNames[i];
                        }
                    }


                    // Just process the raw data
                    this.processData(ref myFile);

                    // Store what we have in the metadata array
                    metadata[8]  = stepSize.ToString();
                    metadata[9]  = stepSize.ToString();
                    metadata[13] = repeats.ToString();
                    metadata[14] = numberInterleaved.ToString();
                }
            }
            else
            {
                System.Windows.Forms.MessageBox.Show("File not recognised");
            }
        }
Ejemplo n.º 2
0
        // Constructor given a file (pass by reference!)
        public fileHandler(ref System.IO.StreamReader myFile, string myFileName)
        {
            //*************************************//
            // Metadata format
            // ---------------
            //
            // "Spectroscopy data file"
            // date
            // "Trap frequency:"
            // trapFrequency
            // "Trap voltage:"
            // trapVoltage
            // "AOM Start frequency:"
            // startFrequency
            // "Step size:"
            // stepSize
            // "Number of repeats per frequency:"
            // repeats
            // "File contains interleaved spectra:"
            // numberInterleaved
            // "This is sideband:"
            // sidebandNumber
            // "Starting pulse length (fixed):"
            // startLength
            // "Number of steps (fixed):"
            // numberOfSteps (fixed)
            // "Spectrum i name":
            // spectrumName[i]
            // "Notes:"
            // Notes section - all lines should start with a #
            // "Data:"


            // Two "name" labels - one in file, one for displaying on graph
            // Name spectra on creation rather than when loading file?
            // Include notes section - parse & display in a window

            //*************************************//

            // String to temporarily store data from the file
            string myString = myFile.ReadLine();              // Read first line of file

            // Make sure it is a valid data file - check for metadata
            if (myString == "Spectroscopy data file")
            {
                //******************************//
                // Processing metadata
                // Just dump it into an array of strings

                metadata = new string[25];

                // Next 36 lines are misc metadata with titles
                for (int i = 0; i < 18; i++)
                {
                    metadata[i] = myFile.ReadLine();               // First line is actual metadata
                    myString = myFile.ReadLine();                  // Alternating lines are just a title (throw away)

                }
                
                float stepSizekHz, startFrequencyMHz;

                // Store crucial metadata - no. of repeats, no. interleaved, step size, start freq
                // int.TryParse(myString, out myInt) converts myString to an int and stores it in myInt
                // then returns true if it was successful, false otherwise

                if (int.TryParse(metadata[13], out repeats) && int.TryParse(metadata[14], out numberInterleaved)
                    && float.TryParse(metadata[9], out stepSizekHz) && float.TryParse(metadata[7], out startFrequencyMHz))
                {
                    if (metadata[1] == "Fixed")
                    {
                        // Make sure starting pulse length is an int
                        if (int.TryParse(metadata[16], out startLength) )
                        {
                            // Don't convert - this is a number of ticks
                            stepSize = (int)stepSizekHz;
                        }
                        else MessageBox.Show("Error reading metadata (pulse length not an int)");
                    }
                    else
                    {
                        // These need converting to Hz and storing as ints
                        stepSize = (int)(stepSizekHz * 1000);
                        
                    }
                    // Always convert start freq to int
                    startFrequency = (int)(startFrequencyMHz * 1000000);
                }
                else
                {
                    MessageBox.Show("Error reading metadata");
                }

                spectrumNames = new string[numberInterleaved];

                // Depending on number of interleaved spectra, store the names in the array
                for (int i = 0; i < numberInterleaved; i++)
                {
                    if (i < 5) // Make sure we don't take more than 5 spectra from file
                    {
                        // Put spectrum name into arrays for both metadata and spectrumNames
                        // ( Need spectrumNames for spectrumSelect dialog)
                        // Bit messy but it's easiest to code this way for now, maybe tidy later
                        // using substrings
                        spectrumNames[i] = myFile.ReadLine();
                        metadata[i + 18] = spectrumNames[i];
                        myString = myFile.ReadLine();
                    }
                }



                myString = myFile.ReadLine();               // Read first line of notes section
                // Keep reading lines while each line begins with a #
                while (myString[0] == '#')
                {
                    notes += myString.Substring(1);
                    notes += System.Environment.NewLine;
                    myString = myFile.ReadLine();
                }


                // NB this will read one line PAST the end of the notes section. This should be the line that says "Data:"
                // Check this - if not then there will be errors reading the data
                if (myString != "Data:")
                {
                    MessageBox.Show("Error: File corrupted (wrong metadata format?)");
                    return;
                }

                // Store in array of metadata
                if (18 + numberInterleaved < 25 && numberInterleaved != 0) metadata[18 + numberInterleaved] = notes;
                else Console.WriteLine("Too many interleaved spectra - gone beyond the bounds of metadata array (line 184 fileHandler.cs)");

                // Process the actual numerical data
                this.processData(ref myFile);
  
            }   // If there is no metadata
            else if (myString == "Spectroscopy data file (no metadata)")
            {
                // Open a form requesting metadata (start freq, repeats, step size, number of spectra)
                // & wait for it to be closed before continuing
                requestMetadata myRequestMetadata = new requestMetadata(ref myFileName);
                myRequestMetadata.ShowDialog();

                // Check that user has pressed ok
                if (myRequestMetadata.DialogResult == DialogResult.OK)
                {
                    // Set metadata from user input on form
                    startFrequency = myRequestMetadata.startFreq;
                    stepSize = myRequestMetadata.stepSize;
                    repeats = myRequestMetadata.repeats;
                    numberInterleaved = myRequestMetadata.numberInterleaved;

                    // Need to initialise this array
                    spectrumNames = new string[numberInterleaved];
                    for (int i = 0; i < numberInterleaved; i++)
                    {
                        spectrumNames[i] = "Default";

                        // Make sure we are not outside the bounds of the array
                        if (i + 18 < 24)
                        {
                            // Store default name in metadata
                            metadata[i + 18] = spectrumNames[i];
                        }
                    }

                    
                    // Just process the raw data
                    this.processData(ref myFile);

                    // Store what we have in the metadata array
                    metadata[8] = stepSize.ToString();
                    metadata[9] = stepSize.ToString();
                    metadata[13] = repeats.ToString();
                    metadata[14] = numberInterleaved.ToString();         

                }

            }
            else System.Windows.Forms.MessageBox.Show("File not recognised");
        }