package es.tid.pce.computingEngine.algorithms.utilities; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class bandwidthToSlotConversion { private Logger log=LoggerFactory.getLogger("PCEServer"); private int numSlots; private int mf; // 1 - NRZ-OOK // 2 - DP-QPSK // 3 - DP-16-QAM public int getNumSlots (float Bw, int cs){ boolean exact=false; int spectralEfficiency = 4; // 2 - DP-QPSK long guardBand = 7000000000L; double fec = 0.12; if (Bw!=0){ //log.info("Cs= "+cs); if (cs==1){ numSlots=(int) (Math.floor(Bw/(spectralEfficiency*100000000000L))); if (((Bw/spectralEfficiency)%100000000000L)==0){ exact=true; } } else if (cs==2){ numSlots=(int) (Math.floor(Bw/(spectralEfficiency*50000000000L))); if (((Bw/spectralEfficiency)%50000000000L)==0){ exact=true; } } else if (cs==3){ numSlots=(int) (Math.floor(Bw/(spectralEfficiency*25000000000L))); if (((Bw/spectralEfficiency)%25000000000L)==0){ exact=true; } } else if (cs==4){ numSlots=(int) (Math.floor(Bw/(spectralEfficiency*12500000000L))); if (((Bw/spectralEfficiency)%12500000000L)==0){ exact=true; } } else if (cs==5){ //log.info("Guardband: "+guardband); numSlots=(int) (Math.floor((((Bw*(1+fec))/spectralEfficiency)+guardBand)/6250000000L)); //log.info("Num_slots: "+((Math.round(Bw*(1+fec))/spectralEfficiency)+guardBand)); if ((((Math.round(Bw*(1+fec))/spectralEfficiency)+guardBand)%6250000000L)==0){ exact=true; } } } if (exact==false ){ if (cs==5){ if(numSlots%2!=0){ numSlots = numSlots + 1; } else{ numSlots = numSlots + 2; } } else{ numSlots=numSlots + 1; } } return numSlots; } }