Back to home page

sPhenix code displayed by LXR

 
 

    


Warning, /analysis/TPC/DAQ/macros/TPCRateLayered.m is written in an unsupported language. File is not indexed.

0001 % bottom up calcualtion of TPC rate using MC approach
0002 % Author - Jin Huang <jhuang@bnl.gov>
0003 
0004 close all
0005 
0006 clear all
0007 
0008 myColorMap = colormap;
0009 myColorMap(1,:) = [1 1 1];
0010 colormap(myColorMap);
0011 %% Inputs
0012 
0013 % n = 1000;
0014 % full_rate = 100e3;
0015 % trig_rate = 15e3;
0016 % trigger_window = 18e-6;
0017 
0018 % n = 10000000;
0019 n = 50000;
0020 % n = 500000;
0021 % full_rate = 250e3;
0022 full_rate = 100e3;
0023 % full_rate = 150e3;
0024 % full_rate = 100e3;
0025 % full_rate = 50e3;
0026 trig_rate = 15e3;
0027 % trigger_window = 4e-6;
0028 trigger_window = 13e-6;
0029 % trigger_window = 17.5e-6;
0030 % trigger_window = 35e-6;
0031 
0032 TargetEta = 1.1;
0033 % TargetEta = 3;
0034 
0035 nRing = 40;
0036 % nRing = 48;
0037 
0038 SaveName = sprintf('TPCRateLayered_%.0fHzCol_%.0fHzTrig_%.0fusDrift_nRing%d',full_rate,trig_rate,trigger_window*1e6, nRing);
0039 
0040 %% Generic constants
0041 
0042 
0043 minR = 30;
0044 maxR = 78;
0045 maxZ = 105;
0046 dNdeta = 2 * 180 * 2; % Pre-CDR table 3.3 with effective factor x2 and two signs x2
0047 bitPerHit =3*5*10 * 1.4;  % Pre-CDR table 3.3 with effective factor
0048 DAMCompressionFactor = 1.02 * 0.5 * 0.6; % Repacking, clustering, compression
0049 
0050 BCO = 10e6;
0051 DataPlotRangeBCO =10000;
0052 
0053 TimeSpan= n/full_rate;
0054 TimeSpanBCO = int64(TimeSpan*BCO);
0055 
0056 
0057 TriggerBCO  = poissrnd(trig_rate/BCO, TimeSpanBCO, 1)';
0058 CollisionBCO =poissrnd((full_rate - trig_rate)/BCO ,TimeSpanBCO, 1)' + TriggerBCO;
0059 
0060 
0061 %% Per triggger
0062 
0063 PerTriggerBCO = int64(trigger_window * BCO);
0064 
0065 RRing = repmat(linspace(minR, maxR, nRing )',1,PerTriggerBCO);
0066 zBCO = repmat(linspace(maxZ, 0, PerTriggerBCO),nRing,1);
0067 
0068 MinEtaRingBCO =   atanh( (zBCO - 10) ./ sqrt((zBCO - 10).^2 + RRing.^2)  );
0069 % MinEtaRingBCO =   atanh( (zBCO - 0) ./ sqrt((zBCO - 0).^2 + RRing.^2)  );
0070 dEtaRingBCO = atanh( (zBCO + maxZ/double(PerTriggerBCO) ) ./ sqrt((zBCO + maxZ/double(PerTriggerBCO) ).^2 + RRing.^2)  ) -  atanh( zBCO ./ sqrt(zBCO.^2 + RRing.^2)  );
0071 dataBitRingBCO = bitPerHit .* dNdeta .* dEtaRingBCO;  % Pre-CDR table 3.3 with effective factor
0072 
0073 TriggerMask = double(MinEtaRingBCO  <  TargetEta);
0074 dataBitRingBCOAfterMask = dataBitRingBCO.*TriggerMask;
0075 
0076 figure('name','PerEventData','PaperPositionMode','auto', ...
0077     'position',[100,0,2400,800]) ;
0078 
0079 subplot(1,2,1)
0080 
0081 
0082 imagesc(zBCO(1,:), RRing(:,1), dataBitRingBCO);
0083 c = colorbar;
0084 
0085 hold on;
0086 plot([10 maxZ+10], [0 tan(acos(tanh(TargetEta))) * maxZ],'k--');
0087 
0088 set(gca,'YDir','normal');
0089 set(gca,'YLim',[0,80]);
0090 set(gca,'XLim',[0,110])
0091 box on
0092 grid on
0093 daspect([1 1 1])
0094 
0095 xlabel('|z| position (cm)','FontSize',14);
0096 ylabel('R position (cm)','FontSize',14);
0097 c.Label.String = 'FEE data (bit) per MB collision per |z|-R bin (integrated over z-sign and azimuth)';
0098 c.Label.FontSize = 14;
0099 
0100 title(sprintf('FEE data (bit) per MB collision per |z|-R bin, total = %.1f Mbit', sum(sum(dataBitRingBCO))/1e6),'FontSize',16);
0101 
0102 
0103 subplot(1,2,2)
0104 
0105 
0106 imagesc(zBCO(1,:), RRing(:,1), dataBitRingBCOAfterMask);
0107 c = colorbar;
0108 hold on;
0109 plot([10 maxZ+10], [0 tan(acos(tanh(TargetEta))) * maxZ],'k--');
0110 
0111 set(gca,'YDir','normal');
0112 set(gca,'YLim',[0,80]);
0113 set(gca,'XLim',[0,110])
0114 box on
0115 grid on
0116 daspect([1 1 1])
0117 
0118 xlabel('|z| position (cm)','FontSize',14);
0119 ylabel('R position','FontSize',14);
0120 c.Label.String = 'FEE data (bit) per MB collision per |z|-R bin (integrated over z-sign and azimuth)';
0121 c.Label.FontSize = 14;
0122 
0123 title(sprintf('FEE data (bit) after DAM acceptance filtering, total = %.1f Mbit', sum(sum(dataBitRingBCOAfterMask))/1e6),'FontSize',16);
0124 
0125 
0126 
0127 
0128 SaveCavas('TPCRateLayered',gcf);
0129 
0130 
0131 %% Run the DAQ
0132 
0133 DataBCO = conv2(CollisionBCO,dataBitRingBCO);
0134 TriggerAcceptBCO = conv2(TriggerBCO,TriggerMask);
0135 ThrottleAcceptBCO = double(TriggerAcceptBCO>0);
0136 
0137 PlotDataBCO = DataBCO(:,1:DataPlotRangeBCO);
0138 PlotThrottleDataBCO = DataBCO(:,1:DataPlotRangeBCO).*ThrottleAcceptBCO(:,1:DataPlotRangeBCO);
0139 
0140 TotalDataRate = sum(sum(DataBCO))/TimeSpan;
0141 TriggerDataRate = sum(sum(DataBCO.*TriggerAcceptBCO))/TimeSpan;
0142 ThrottleDataRate = sum(sum(DataBCO.*ThrottleAcceptBCO))/TimeSpan;
0143 
0144 %% Event stream display
0145 
0146 figure('name','DataStream','PaperPositionMode','auto', ...
0147     'position',[100,0,2400,800]) ;
0148 
0149 subplot(2,1,1)
0150 
0151 imagesc( DataBCO(:,1:DataPlotRangeBCO) );
0152 c = colorbar;
0153 hold on;
0154 set(gca,'YDir','normal');
0155 set(gca,'YLim',[-4,nRing+1]);
0156 
0157 xlabel('BCO bin (100 ns)','FontSize',14);
0158 ylabel('Radial layer number','FontSize',14);
0159 c.Label.String = 'FEE data (bit)';
0160 c.Label.FontSize = 14;
0161 title(sprintf('FEE data input to DAM. Rate = %.0f Gbps @ %.0f kHz Collision, %.0f kHz Trigger %.0f us Drift',...
0162     sum(sum(DataBCO))/TimeSpan/1e9,full_rate/1e3,trig_rate/1e3,trigger_window*1e6),'FontSize',16);
0163 
0164 for i = 1:DataPlotRangeBCO
0165     
0166     if (TriggerBCO(i) >0)
0167         
0168         plot([i i], [-3 nRing],'r--','LineWidth',2);
0169         plot([i,i+PerTriggerBCO], [-3 -3], 'r-', 'LineWidth', 2)
0170         plot([i,i+PerTriggerBCO], [-1 -1], 'k-', 'LineWidth', 2)
0171         
0172     elseif (CollisionBCO(i) >0)
0173         
0174         plot([i i], [-1 nRing],'k--','LineWidth',2);
0175         plot([i,i+PerTriggerBCO], [-1 -1], 'k-', 'LineWidth', 2)
0176     end
0177     
0178     
0179 end
0180 
0181 
0182 
0183 subplot(2,1,2)
0184 
0185 imagesc( PlotThrottleDataBCO );
0186 c = colorbar;
0187 hold on;
0188 set(gca,'YDir','normal');
0189 set(gca,'YLim',[-4,nRing+1]);
0190 
0191 xlabel('BCO bin (100 ns)','FontSize',14);
0192 ylabel('Radial layer number','FontSize',14);
0193 c.Label.String = 'FEE data equavelent (bit)';
0194 c.Label.FontSize = 14;
0195 title(sprintf('DAM data output: Throttled data rate = %.0f Gbps, Triggered data rate = %.0f Gbps ',...
0196     ThrottleDataRate * DAMCompressionFactor/1e9 ,...
0197     TriggerDataRate * DAMCompressionFactor/1e9...
0198     ),'FontSize',16);
0199 
0200 for i = 1:DataPlotRangeBCO
0201     
0202     if (TriggerBCO(i) >0)
0203         
0204         plot([i i], [-3 nRing],'r--','LineWidth',2);
0205         plot([i,i+PerTriggerBCO], [-3 -3], 'r-', 'LineWidth', 2)
0206         plot([i,i+PerTriggerBCO], [-1 -1], 'k-', 'LineWidth', 2)
0207         
0208     elseif (CollisionBCO(i) >0)
0209         
0210         plot([i i], [-1 nRing],'k--','LineWidth',2);
0211         plot([i,i+PerTriggerBCO], [-1 -1], 'k-', 'LineWidth', 2)
0212     end
0213     
0214     
0215 end
0216 
0217 SaveCavas(SaveName,gcf);
0218 
0219 
0220 %% Event stream display - 1D
0221 
0222 figure('name','DataStream1D','PaperPositionMode','auto', ...
0223     'position',[100,0,2400,800]) ;
0224 
0225 subplot(2,1,1)
0226 
0227 bar( PlotDataBCO(nRing,:) ,1);
0228 % c = colorbar;
0229 hold on;
0230 set(gca,'YDir','normal');
0231 set(gca, 'XLim',[0 DataPlotRangeBCO]);
0232 ylim = get(gca,'YLim');
0233 y_max = ylim(2);
0234 
0235 xlabel('BCO bin (100 ns)','FontSize',14);
0236 ylabel('Data in last TPC layer (bit/BCO)','FontSize',14);
0237 % c.Label.String = 'FEE data (bit)';
0238 % c.Label.FontSize = 14;
0239 title(sprintf('FEE data input to DAM. Rate = %.0f Gbps @ %.0f kHz Collision, %.0f kHz Trigger %.0f us Drift',...
0240     sum(sum(DataBCO))/TimeSpan/1e9,full_rate/1e3,trig_rate/1e3,trigger_window*1e6),'FontSize',16);
0241 
0242 for i = 1:DataPlotRangeBCO
0243     
0244     if (TriggerBCO(i) >0)
0245         
0246         plot([i i], [-.15 1].*y_max,'r--','LineWidth',1);
0247         plot([i,i+PerTriggerBCO], [-.15 -.15].*y_max, 'r-', 'LineWidth', 1)
0248         plot([i,i+PerTriggerBCO], [-.1 -.1].*y_max, 'k-', 'LineWidth', 1)
0249         
0250     elseif (CollisionBCO(i) >0)
0251         
0252         plot([i i], [-.1 1].*y_max,'k--','LineWidth',1);
0253         plot([i,i+PerTriggerBCO],  [-.1 -.1].*y_max, 'k-', 'LineWidth', 1)
0254     end
0255     
0256     
0257 end
0258 
0259 
0260 
0261 subplot(2,1,2)
0262 
0263 bar( PlotThrottleDataBCO(nRing,:), 1 );
0264 % c = colorbar;
0265 hold on;
0266 set(gca,'YDir','normal');
0267 set(gca, 'XLim',[0 DataPlotRangeBCO]);
0268 % set(gca,'YLim',[-4,nRing+1]);
0269 
0270 xlabel('BCO bin (100 ns)','FontSize',14);
0271 ylabel('Data in last TPC layer (bit/BCO)','FontSize',14);
0272 % c.Label.String = 'FEE data equavelent (bit)';
0273 % c.Label.FontSize = 14;
0274 title(sprintf('DAM data output: Throttled data rate = %.0f Gbps, Triggered data rate = %.0f Gbps ',...
0275     ThrottleDataRate * DAMCompressionFactor/1e9 ,...
0276     TriggerDataRate * DAMCompressionFactor/1e9...
0277     ),'FontSize',16);
0278 
0279 for i = 1:DataPlotRangeBCO
0280     
0281     if (TriggerBCO(i) >0)
0282         
0283         plot([i i], [-.15 1].*y_max,'r--','LineWidth',1);
0284         plot([i,i+PerTriggerBCO], [-.15 -.15].*y_max, 'r-', 'LineWidth', 1)
0285         plot([i,i+PerTriggerBCO], [-.1 -.1].*y_max, 'k-', 'LineWidth', 1)
0286         
0287     elseif (CollisionBCO(i) >0)
0288         
0289         plot([i i], [-.1 1].*y_max,'k--','LineWidth',1);
0290         plot([i,i+PerTriggerBCO],  [-.1 -.1].*y_max, 'k-', 'LineWidth', 1)
0291     end
0292     
0293     
0294 end
0295 
0296 
0297 SaveCavas(SaveName,gcf);
0298 
0299 %% FEE Data Rate
0300 
0301 DataRadialLayerRate = sum(DataBCO, 2) / TimeSpan;
0302 
0303 if nRing == 40
0304     
0305     FEEDataRate = [sum( DataRadialLayerRate(1:8))/5;
0306         sum( DataRadialLayerRate((8+1):(8+16)))/8;
0307         sum( DataRadialLayerRate((8+1+16):(8+16+16)))/12]...
0308         /12/2;%12 sectors and two sides
0309 elseif nRing == 48
0310     
0311     FEEDataRate = [sum( DataRadialLayerRate(1:16))/6;
0312         sum( DataRadialLayerRate((16+1):(16+16)))/8;
0313         sum( DataRadialLayerRate((16+1+16):(16+16+16)))/12]...
0314         /12/2;%12 sectors and two sides
0315     
0316 else
0317     assert(0);
0318 end
0319 
0320 
0321 %% FEE Data Rate Plot
0322 
0323 figure('name','FEEDataRate','PaperPositionMode','auto', ...
0324     'position',[100,0,800,400]) ;
0325 
0326 
0327 bar( FEEDataRate/1e9 );
0328 % c = colorbar;
0329 hold on;
0330 set(gca,'YDir','normal');
0331 % set(gca, 'XLim',[0 DataPlotRangeBCO]);
0332 ylim = get(gca,'YLim');
0333 y_max = ylim(2);
0334 
0335 xlabel('Module Number','FontSize',16);
0336 ylabel('Average data rate per FEE (Gbps)','FontSize',16);
0337 % c.Label.String = 'FEE data (bit)';
0338 % c.Label.FontSize = 14;
0339 title(sprintf('FEE data input to DAM. Total = %.0f Gbps @ %.0f kHz Collision, %.0f kHz Trigger %.0f us Drift',...
0340     sum(sum(DataBCO))/TimeSpan/1e9,full_rate/1e3,trig_rate/1e3,trigger_window*1e6),'FontSize',12);
0341 
0342 SaveCavas(SaveName,gcf);
0343 
0344 %% Collision pile up histogram
0345 
0346 nPileUpTrig = zeros(  sum(TriggerBCO(PerTriggerBCO+1:(TimeSpanBCO-PerTriggerBCO)))  ,1)  ;
0347 nPileUpRnd = zeros(  TimeSpanBCO - 2*PerTriggerBCO  ,1)  ;
0348 
0349 iTrig = 1;
0350 for i = PerTriggerBCO+1:(TimeSpanBCO-PerTriggerBCO)
0351     
0352     if (TriggerBCO(i));
0353         
0354         nPileUpTrig(iTrig) = sum( CollisionBCO((i-PerTriggerBCO):(i+PerTriggerBCO)) );
0355         
0356         iTrig = iTrig +1;
0357     end
0358     
0359     nPileUpRnd(i- PerTriggerBCO + 1) = sum( CollisionBCO((i-PerTriggerBCO):(i+PerTriggerBCO)) );
0360     
0361     
0362 end
0363 %%
0364 
0365 figure('name','nPileUp','PaperPositionMode','auto', ...
0366     'position',[100,0,2000,800]) ;
0367 
0368 subplot(1,2,1)
0369 
0370 hist(nPileUpTrig,0:20);
0371 
0372 set(gca,'XLim',[-1,11]);
0373 xlabel('Number of collisions in TPC drift window','FontSize',14);
0374 ylabel('Count per bin','FontSize',14);
0375 title(sprintf('Collision trigger: <# collision in TPC window> = %.2f @ %.0f kHz Collision, %.0f us Drift',...
0376     mean(nPileUpTrig),...
0377     full_rate/1e3,trigger_window*1e6),'FontSize',16);
0378 
0379 subplot(1,2,2)
0380 
0381 hist(nPileUpRnd,0:20);
0382 
0383 set(gca,'XLim',[-1,11]);
0384 xlabel('Number of collisions in TPC drift window','FontSize',14);
0385 ylabel('Count per bin','FontSize',14);
0386 title(sprintf('Random trigger: <# collision in TPC window> = %.2f @ %.0f kHz Collision, %.0f us Drift',...
0387     mean(nPileUpRnd),...
0388     full_rate/1e3,trigger_window*1e6),'FontSize',16);
0389 
0390 SaveCavas(SaveName,gcf);
0391 
0392 %%
0393 
0394 % fprintf('Throttled event / total = %.3f; Throttled data / total = %.3f; Triggered event / total = %.3f; Triggered data / total = = %.3f\n',...
0395 %     n_recorded/n, recorded_data/n, n_triggered./n, triggered_data/n);
0396 fprintf('------------\n');
0397 
0398 fprintf('full_rate = %.0f kHz; trig_rate= %.0f kHz; trigger_window= %.1f us; Time span = %.3f s \n',...
0399     full_rate/1e3,trig_rate/1e3, trigger_window*1e6, TimeSpan );
0400 
0401 fprintf('per event effective track = %.0f , per event FEE data = %.0f bits, total FEE data rate = %.0f Gbps \n',...
0402     mean(sum(dEtaRingBCO,2)*180*2), sum(sum(dataBitRingBCO)), sum(sum(DataBCO))/TimeSpan/1e9 );
0403 
0404 fprintf('Trigger rate*drift window = %.2f;Full rate*drift window= %.2f;Trigger rate/full rate = %.2f (input)/%.2f(MC); \n',...
0405     trig_rate*trigger_window,full_rate*trigger_window,trig_rate/full_rate, sum(TriggerBCO)/sum(CollisionBCO)  );
0406 
0407 fprintf('throttled data / total = %.3f; Triggered data / total = %.3f; throttled/trigger = %.3f; Triggered data/Per event data = %.3f \n',...
0408     ThrottleDataRate/TotalDataRate,...
0409     TriggerDataRate/TotalDataRate,...
0410     ThrottleDataRate/TriggerDataRate,...
0411     sum(sum(DataBCO.*TriggerAcceptBCO)) ./ (sum(sum(dataBitRingBCOAfterMask)).*sum(TriggerBCO))...
0412     );
0413 %    sum(sum(DataBCO.*TriggerAcceptBCO)) ./ (sum(sum(dataBitRingBCOAfterMask)).*sum(CollisionBCO))...
0414 
0415 fprintf('throttled data rate = %.0f Gbps; Triggered data rate = %.0f Gbps\n',...
0416     ThrottleDataRate * DAMCompressionFactor/1e9 ,...
0417     TriggerDataRate * DAMCompressionFactor/1e9);
0418 fprintf('------------\n');
0419 
0420 % fprintf('throttled event / total = %.3f; Triggered event / total = = %.3f;  throttled/trigger = %.3f\n',...
0421 %     recorded_data/n, triggered_data/n, recorded_data/triggered_data );
0422