DecelerationConfig.TimingSequence.ToString C# (CSharp) Method

ToString() public method

public ToString ( ) : String
return String
        public override String ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("Version = " + version + "\n");
            sb.Append("Name = " + name + "\n");
            foreach (Edge edge in sequence) sb.Append(edge.ToString() + "\n");

            return sb.ToString();
        }

Usage Example

コード例 #1
0
        private void buildDecelerationSequence()
        {
            //get the settings we need
            double voltage = (double)settings["voltage"];
            int initspeed = (int)settings["initspeed"];
            double onposition = (double)settings["onposition"] / 1000;
            double offposition = (double)settings["offposition"] / 1000;
            int numberOfStages = (int)settings["numberOfStages"];
            int resonanceOrder = (int)settings["resonanceOrder"];
            int jState = (int)settings["jState"];
            int mState = (int)settings["mState"];

            // make the FieldMap
            FieldMap map = new FieldMap((string)Environs.FileSystem.Paths["decelerationUtilitiesPath"] +
                (string)Environs.Hardware.GetInfo("deceleratorFieldMap"),
                (int)Environs.Hardware.GetInfo("mapPoints"),
                (double)Environs.Hardware.GetInfo("mapStartPoint"),
                (double)Environs.Hardware.GetInfo("mapResolution"));
            //make the molecule
            Molecule mol = new Molecule((string)Environs.Hardware.GetInfo("moleculeName"),
                (double)Environs.Hardware.GetInfo("moleculeMass"),
                (double)Environs.Hardware.GetInfo("moleculeRotationalConstant"),
                (double)Environs.Hardware.GetInfo("moleculeDipoleMoment"));
            //make the decelerator and the experiment
            Decelerator decel = new Decelerator();
            DecelerationExperiment experiment = new DecelerationExperiment();
            //assign a map and a lens spacing to the decelerator
            decel.Map = map;
            decel.LensSpacing = (double)Environs.Hardware.GetInfo("deceleratorLensSpacing");
            //assign decelerator, molecule, quantum state and switch structure to the experiment
            experiment.Decelerator = decel;
            experiment.Molecule = mol;
            experiment.QuantumState = new int[] { jState, mState };
            experiment.Structure = (DecelerationExperiment.SwitchStructure)Environs.Hardware.GetInfo("deceleratorStructure");
            //get the timing sequence
            double[] timesdouble = experiment.GetTimingSequence(voltage, onposition, offposition, initspeed, numberOfStages, resonanceOrder);

            // The list of times is in seconds and is measured from the moment when the synchronous molecule
            // reaches the decelerator. Add on the amount of time it takes to reach this point.
            // Then convert to the units of the clockFrequency and round to the nearest unit.
            double nominalTimeToDecelerator = (double)Environs.Hardware.GetInfo("sourceToSoftwareDecelerator") / initspeed;
            int[] times = new int[timesdouble.Length];
            for (int i = 0; i < timesdouble.Length; i++)
            {
                times[i] = (int)Math.Round((int)settings["clockFrequency"] * (nominalTimeToDecelerator + timesdouble[i]));
            }

            int[] structure = new int[times.Length];

            // the last switch must send all electrodes to ground
            structure[structure.Length - 1] = 0;
            // build the rest of the structure
            int k = 0;
            switch (experiment.Structure)
            {
                case DecelerationExperiment.SwitchStructure.H_Off_V_Off:
                    while (k < structure.Length - 1)
                    {
                        if (k < structure.Length - 1) { structure[k] = 2; k++; }
                        if (k < structure.Length - 1) { structure[k] = 0; k++; }
                        if (k < structure.Length - 1) { structure[k] = 1; k++; }
                        if (k < structure.Length - 1) { structure[k] = 0; k++; }
                    }
                    break;
                case DecelerationExperiment.SwitchStructure.V_Off_H_Off:
                    while (k < structure.Length - 1)
                    {
                        if (k < structure.Length - 1) { structure[k] = 1; k++; }
                        if (k < structure.Length - 1) { structure[k] = 0; k++; }
                        if (k < structure.Length - 1) { structure[k] = 2; k++; }
                        if (k < structure.Length - 1) { structure[k] = 0; k++; }
                    }
                    break;
                case DecelerationExperiment.SwitchStructure.H_V:
                    while (k < structure.Length - 1)
                    {
                        if (k < structure.Length - 1) { structure[k] = 2; k++; }
                        if (k < structure.Length - 1) { structure[k] = 1; k++; }
                    }
                    break;
                case DecelerationExperiment.SwitchStructure.V_H:
                    while (k < structure.Length - 1)
                    {
                        if (k < structure.Length - 1) { structure[k] = 1; k++; }
                        if (k < structure.Length - 1) { structure[k] = 2; k++; }
                    }
                    break;
            }
            // keep track of the state of the horizontal and vertical electrodes
            bool[] states = { false, false }; //{horizontal, vertical}
            decelSequence = new TimingSequence();
            // The timing sequence is built within this for loop. The structure of the decelerator is encoded
            // as follows: 0 means everything off, 1 means V on, H off, 2 means H on V off and 3 means both on.
            for (int i = 0; i < times.Length && i < structure.Length; i++)
            {
                if (structure[i] == 0) //horizontal = false, vertical = false
                {
                    if (states[0] != false)
                    {
                        decelSequence.Add("decelhplus", times[i], false);
                        decelSequence.Add("decelhminus", times[i], false);
                        states[0] = false;
                    }
                    if (states[1] != false)
                    {
                        decelSequence.Add("decelvplus", times[i], false);
                        decelSequence.Add("decelvminus", times[i], false);
                        states[1] = false;
                    }
                }

                if (structure[i] == 1) //horizontal = false, vertical = true
                {
                    if (states[0] != false)
                    {
                        decelSequence.Add("decelhplus", times[i], false);
                        decelSequence.Add("decelhminus", times[i], false);
                        states[0] = false;
                    }
                    if (states[1] != true)
                    {
                        decelSequence.Add("decelvplus", times[i], true);
                        decelSequence.Add("decelvminus", times[i], true);
                        states[1] = true;
                    }
                }

                if (structure[i] == 2) //horizontal = true, vertical = false
                {
                    if (states[0] != true)
                    {
                        decelSequence.Add("decelhplus", times[i], true);
                        decelSequence.Add("decelhminus", times[i], true);
                        states[0] = true;
                    }
                    if (states[1] != false)
                    {
                        decelSequence.Add("decelvplus", times[i], false);
                        decelSequence.Add("decelvminus", times[i], false);
                        states[1] = false;
                    }
                }

                if (structure[i] == 3) //horizontal = true, vertical = true
                {
                    if (states[0] != true)
                    {
                        decelSequence.Add("decelhplus", times[i], true);
                        decelSequence.Add("decelhminus", times[i], true);
                        states[0] = true;
                    }
                    if (states[1] != true)
                    {
                        decelSequence.Add("decelvplus", times[i], true);
                        decelSequence.Add("decelvminus", times[i], true);
                        states[1] = true;
                    }
                }
            }
            Console.WriteLine(decelSequence.ToString());
        }