public long[] RetrieveExperimentIds(Criterion[] carray)
        {
            BrokerDB brokerDB = new BrokerDB();

            long[] expIds = null;
            if (brokerDB.AuthenticateIssuedCoupon(opHeader.coupon))
            {
                expIds = getExperimentIDs(opHeader.coupon, carray);
            }
            return expIds;
        }
        public ExperimentSummary[] RetrieveExperimentSummary(Criterion[] carray)
        {
            BrokerDB brokerDB = new BrokerDB();
            ExperimentSummary[] summaries = null;
            if (brokerDB.AuthenticateIssuedCoupon(opHeader.coupon))
            {
                long[] expIds = getExperimentIDs(opHeader.coupon, carray);
                summaries = InternalDataDB.SelectExperimentSummaries(expIds);

            }
            return summaries;
        }
        public StorageStatus ClientCloseExperiment(long experimentId)
        {
            BrokerDB ticketIssuer = new BrokerDB();
            StorageStatus status = null;
            bool experimentClosed = false;

            //Coupon opCoupon = new Coupon(opHeader.coupon.issuerGuid, opHeader.coupon.couponId,
            //     opHeader.coupon.passkey);
            if (ticketIssuer.AuthenticateIssuedCoupon(opHeader.coupon))
            {
                Ticket expTicket = ticketIssuer.RetrieveTicket(opHeader.coupon, TicketTypes.EXECUTE_EXPERIMENT);
                if (expTicket != null)
                {
                    // Check for ESS use
                    Ticket essTicket = ticketIssuer.RetrieveTicket(opHeader.coupon, TicketTypes.ADMINISTER_EXPERIMENT);
                    if (essTicket != null)
                    {
                        ProcessAgentInfo ess = ticketIssuer.GetProcessAgentInfo(essTicket.redeemerGuid);
                        if (ess != null)
                        {
                            if (ess.retired)
                            {
                                throw new Exception("The ProcessAgent is retired");
                            }
                            ExperimentStorageProxy essProxy = new ExperimentStorageProxy();
                            essProxy.AgentAuthHeaderValue = new AgentAuthHeader();
                            essProxy.AgentAuthHeaderValue.coupon = ess.identOut;
                            essProxy.Url = ess.webServiceUrl;
                            status = essProxy.CloseExperiment(experimentId);
                            DataStorageAPI.UpdateExperimentStatus(status);
                        }
                        ticketIssuer.CancelIssuedTicket(opHeader.coupon, essTicket);
                    }
                    else
                    {
                        // Close the local Experiment records
                        // Note: store and retrieve tickets are not cancelled.
                        experimentClosed = DataStorageAPI.CloseExperiment(experimentId, StorageStatus.CLOSED_USER);
                        status = DataStorageAPI.RetrieveExperimentStatus(experimentId);
                    }

                }
            }
            return status;
        }