function addOTQAPF() {
	var title = "TaqMan<sup>&reg;</sup>&nbsp;OpenArray<sup>&reg;</sup>&nbsp;Real-Time PCR Panels";
	var formatObj = findApproximateOpenTaqpf(getExperimentInfo('nooftargets') - 1);
	var format = "Multiple";
	var partNo = formatObj.get('partnumber');
	
	var noofgenes = formatObj.get('formatno');
	var reqnoofunits = getExperimentInfo('noofsamples') * getExperimentInfo('noofsubarrays')/ 48;
	var noofunits = reqnoofunits < formatObj.get('min') ? formatObj.get('min')
			: Math.ceil(reqnoofunits);
	var min = formatObj.get('min');
	var isMin = (min == 1 ? 1 : (Math.ceil(reqnoofunits) < min ? 0 : 1));

	var noofreactions = noofgenes * getExperimentInfo('noofsamples');
	var masterperc = (Ext.get('masterperc').dom.value).split('%')[0];
	var accessperc = (Ext.get('accessoriesperc').dom.value).split('%')[0];
	
	var volumeDiscount = 0;


	var pricePerUnit = formatObj.regions().findRecord('region', 'NA').prices()
	.findRecord('countrycode', 'USD').get('value');
	
	
	var price = pricePerUnit * noofunits;

	
	
	
	var formatObj1 = findApproximateOpenTapIRecord(getExperimentInfo('nooftargets') - 1);
	var mvolume = reqnoofunits * 150;
	var masterMixRec = findOptimumOpenArrayGeneMicroMMXRecord(mvolume);
	var mastermix = masterMixRec.product;
	var mmxPartNumber = masterMixRec.partnumber;
	
	
	var openarrayperc = parseFloat((Ext.get('openarrayperc').dom.value).split('%')[0]);
	var assaysCostWithVolDisc = price - (((volumeDiscount+openarrayperc) / 100 )* price);

	
	var openArray384Obj = accessories.findRecord('product', 'OpenArray® 384-well Sample Plates');
	var acc1PartNumber = openArray384Obj.get('partnumber');

	var openArray384WellSamplePlatesUnits = Math.ceil(formatObj1
			.get('sampleplates')
			* reqnoofunits) < openArray384Obj.get('min') ? openArray384Obj.get(
					'min') : Math.ceil(formatObj1.get('sampleplates')
			* reqnoofunits);
	var openArray384WellSamplePlatesCost = pricelist.findRecord('partnumber', acc1PartNumber)
	.regions().findRecord('region', region + "-" + currency).get('price')
			* openArray384WellSamplePlatesUnits * (1 - (accessperc / 100));

	
	var opeArrayAccuObj = accessories.findRecord('product', 'OpenArray® AccuFill® System Tips');
	var acc2PartNumber = opeArrayAccuObj.get('partnumber');

	var openArrayAccuFillSystemTipsUnits = Math.ceil((formatObj1
			.get('tipsperunit') * reqnoofunits) % 10) < opeArrayAccuObj.get('min') ? opeArrayAccuObj.get(
					'min')
			: Math.ceil((formatObj1.get('tipsperunit') * reqnoofunits) % 10);

	var openArrayAccuFillSystemTipsCost = pricelist.findRecord('partnumber', acc2PartNumber)
	.regions().findRecord('region', region + "-" + currency).get('price')
			* openArrayAccuFillSystemTipsUnits * (1 - (accessperc / 100));
	
	var openArrayAccu10Obj = accessories
	.findRecord('product',
	'OpenArray® AccuFill® System Tips, 10 pack');
	var acc3PartNumber = openArrayAccu10Obj.get('partnumber');


	var openArrayAccuFillSystemTips10PackUnits = Math.ceil(Math
			.floor((formatObj1.get('tipsperunit') * reqnoofunits) / 10)) < openArrayAccu10Obj
			.get('min') ? openArrayAccu10Obj.get('min') : Math
			.ceil(Math
					.floor((formatObj1.get('tipsperunit') * reqnoofunits) / 10));
	var openArrayAccuFillSystemTips10PackCost = pricelist.findRecord('partnumber', acc3PartNumber)
	.regions().findRecord('region', region + "-" + currency).get('price')
			* openArrayAccuFillSystemTips10PackUnits * (1 - (accessperc / 100));
	

	var masterMixUnits = Math.ceil(mvolume/ masterMixRec.volume);;
	
			
			
			
	// var openarraycost = formatObj.
	
    var masterMixCostPerUnit = pricelist.findRecord('partnumber', mmxPartNumber)
	.regions().findRecord('region', region + "-" + currency).get(
	'price');
	
	
	
	var masterMixCost = masterMixCostPerUnit * masterMixUnits;
	
	var masterMixCostWithDisc = masterMixCostPerUnit * masterMixUnits * (1 - (masterperc / 100));
	var masterMixCostPerReaction = masterMixCostWithDisc / noofreactions;
	
	var accessoriescost = openArray384WellSamplePlatesCost
			+ openArrayAccuFillSystemTipsCost
			+ openArrayAccuFillSystemTips10PackCost;
	
	var totalAccessoriescost = accessoriescost;
	
    var accessoriesCostPerReaction = totalAccessoriescost/noofreactions;
	
	var assayCostPerReaction = assaysCostWithVolDisc / noofreactions;
	
	var totalCostPerReaction = masterMixCostPerReaction + assayCostPerReaction + accessoriesCostPerReaction;
	
	
    var totalCostPreDisc = accessoriescost + masterMixCost + price;
    
	
	var totalCost = totalAccessoriescost + masterMixCostWithDisc
	+ assaysCostWithVolDisc;
	
    var totalDiscount = 100 - (totalCost*100/totalCostPreDisc);
	
	var assayCostPerSample = assaysCostWithVolDisc / getExperimentInfo('noofsamples');
	var acc1CostPerSample = openArray384WellSamplePlatesCost / getExperimentInfo('noofsamples');
	var acc2CostPerSample = openArrayAccuFillSystemTipsCost / getExperimentInfo('noofsamples');
	var acc3CostPerSample = openArrayAccuFillSystemTips10PackCost / getExperimentInfo('noofsamples');
	var accessoriesCostPerSample = acc1CostPerSample + acc2CostPerSample + acc3CostPerSample;
	var mmixCostPerSample = masterMixCostWithDisc / getExperimentInfo('noofsamples');
	
	var totalCostPerSample = assayCostPerSample + acc1CostPerSample + acc2CostPerSample + acc3CostPerSample + mmixCostPerSample;
	
	var noOfHours = 0;
	var oType = getExperimentInfo('openarrayinstrument') == "QuantStudio" ? "GEandMirnaQS" : "GEandMirnaNT";
	var tRec = openarrayruntimes.findRecord('type', oType);
	noOfHours = Math.ceil(Math.ceil((reqnoofunits) / tRec.get('noofplatesperrun')) * tRec.get('totalmin') /60);
	
	
	outputList.add({
		pno : 13,
		title : title,
		partnumber : partNo,
		format : format.replace(/�/gi, '<sup>&reg;</sup>&nbsp;'),
		noofunits : noofunits,
		noofreactions : noofreactions,
		mastermix : mastermix.replace(/�/gi, '<sup>&reg;</sup>&nbsp;'),
		mnoofunits : masterMixUnits,
		totalcost : roundNumber(totalCost, 2),
		volumediscount : volumeDiscount,
		mvolumediscount : 0,
		mastermixdisc : masterperc,
		accessoriesdisc : accessperc,
		assayscost : roundNumber(price,2),
		assayscostperunit : roundNumber(pricePerUnit,2),
		assayscostwithvoldisc : roundNumber(assaysCostWithVolDisc, 2),
		mastermixvol : 0,
		mastermixcostperunit : masterMixCostPerUnit,
		mastermixcostwithvoldisc : masterMixCost,
		mastermixcostwithdisc : roundNumber(masterMixCostWithDisc,2),
		mastermixcost : masterMixCost,
		noofhours : noOfHours,
		assaycostperreaction : roundNumber(assayCostPerReaction, 2),
		mastermixcostperreaction : roundNumber(masterMixCostPerReaction, 2),
		accessoriescostperreaction : roundNumber(accessoriesCostPerReaction, 2),
		optimizationcostperreaction : 0,
		totalcostperreaction : roundNumber(totalCostPerReaction,2),
		producturl : '',
		openarray384wellsampleplatescost : openArray384WellSamplePlatesCost,
		openarrayaccufillsystemtipscost : openArrayAccuFillSystemTipsCost,
		openarrayaccufillsystemtips10packcost : openArrayAccuFillSystemTips10PackCost,
		openarray384wellsampleplatesunits:openArray384WellSamplePlatesUnits,
		openarrayaccufillsystemtipsunits: openArrayAccuFillSystemTipsUnits,
		openarrayaccufillsystemtips10packunits: openArrayAccuFillSystemTips10PackUnits,
		mastermixunits:masterMixUnits,
		totalcostpersample: roundNumber(totalCostPerSample, 2),
		accessoriescost : roundNumber(accessoriescost, 2),
		accessoriescostwithdisc: roundNumber(totalAccessoriescost, 2), 
		assaycostpersample : roundNumber(assayCostPerSample, 2),
		accessoriescostpersample : roundNumber(accessoriesCostPerSample, 2),
		mmxcostpersample : roundNumber(mmixCostPerSample, 2),
		totalcostpredisc : roundNumber(totalCostPreDisc, 2),
		totaldiscount : roundNumber(totalDiscount, 2),
		accessory1partnumber : acc1PartNumber,
		accessory2partnumber : acc2PartNumber,
		accessory3partnumber : acc3PartNumber,
		mastermixpartnumber : mmxPartNumber,
		reqnoofunits : reqnoofunits,
        type: 'openarray-fixed',
		min : min,
		ismin : isMin,
		fnName:'addOTQAPF'
	});

}

function findApproximateOpenTaqpf(value) {
	var record = null;
	var name = "TQMN OA";
	var prevRecord = null;
	return openArrayFixed.getAt(0);
}