@@ -258,14 +258,14 @@ private Object getAllRegionalResults (Request req, Response res) throws IOExcept
258258 for (String destinationPointSetId : analysis .destinationPointSetIds ) {
259259 String destinationsName = getDestinationsName (destinationPointSetId , userPermissions );
260260 for (int percentile : analysis .travelTimePercentiles ) {
261- FileStorageKey multiKey = RegionalAnalysis .getMultiOriginAccessFileKey (regionalAnalysisId , destinationPointSetId , percentile );
261+ FileStorageKey multiKey = analysis .getMultiOriginAccessFileKey (destinationPointSetId , percentile );
262262 File multiThresholdFile = fileStorage .getFile (multiKey );
263263 for (int cutoffMinutes : analysis .cutoffsMinutes ) {
264- FileStorageKey singleCutoffKey = RegionalAnalysis .getSingleCutoffGridFileKey (regionalAnalysisId , destinationPointSetId , percentile , cutoffMinutes , FileStorageFormat .GEOTIFF );
264+ FileStorageKey singleCutoffKey = analysis .getSingleCutoffGridFileKey (destinationPointSetId , percentile , cutoffMinutes , FileStorageFormat .GEOTIFF );
265265 if (!fileStorage .exists (singleCutoffKey )) {
266266 generateSingleThresholdResultsFile (multiThresholdFile , singleCutoffKey , cutoffMinutes , FileStorageFormat .GEOTIFF );
267267 }
268- String humanName = RegionalAnalysis .getSingleCutoffGridFileKey (analysis .humanName (), destinationsName , percentile , cutoffMinutes , FileStorageFormat .GEOTIFF ).path ;
268+ String humanName = analysis .getSingleCutoffGridFileKey (analysis .humanName (), destinationsName , percentile , cutoffMinutes , FileStorageFormat .GEOTIFF ).path ;
269269 fileKeys .put (humanName , singleCutoffKey );
270270 progressListener .increment ();
271271 }
@@ -375,9 +375,9 @@ private UrlWithHumanName getRegionalResults (Request req, Response res) throws I
375375 "Dual access thresholds for this regional analysis must be taken from this list: (%s)" ,
376376 Ints .join (", " , thresholds )
377377 );
378- singleThresholdKey = RegionalAnalysis .getSingleThresholdDualAccessGridFileKey (regionalAnalysisId , destinationPointSetId , percentile , threshold , format );
379- multiKey = RegionalAnalysis .getMultiOriginDualAccessFileKey (regionalAnalysisId , destinationPointSetId , percentile );
380- humanName = RegionalAnalysis .getSingleThresholdDualAccessGridFileKey (analysis .humanName (), destinationsName , percentile , threshold , format ).path ;
378+ singleThresholdKey = analysis .getSingleThresholdDualAccessGridFileKey (destinationPointSetId , percentile , threshold , format );
379+ multiKey = analysis .getMultiOriginDualAccessFileKey (destinationPointSetId , percentile );
380+ humanName = analysis .getSingleThresholdDualAccessGridFileKey (analysis .humanName (), destinationsName , percentile , threshold , format ).path ;
381381 } else {
382382 // The cutoff variable holds the actual cutoff in minutes, not the position in the array of cutoffs.
383383 checkState (analysis .cutoffsMinutes != null , "Regional analysis has no cutoffs." );
@@ -389,9 +389,9 @@ private UrlWithHumanName getRegionalResults (Request req, Response res) throws I
389389 "Travel time cutoff for this regional analysis must be taken from this list: (%s)" ,
390390 Ints .join (", " , analysis .cutoffsMinutes )
391391 );
392- singleThresholdKey = RegionalAnalysis .getSingleCutoffGridFileKey (regionalAnalysisId , destinationPointSetId , percentile , threshold , format );
393- multiKey = RegionalAnalysis .getMultiOriginAccessFileKey (regionalAnalysisId , destinationPointSetId , percentile );
394- humanName = RegionalAnalysis .getSingleCutoffGridFileKey (analysis .humanName (), destinationsName , percentile , threshold , format ).path ;
392+ singleThresholdKey = analysis .getSingleCutoffGridFileKey (destinationPointSetId , percentile , threshold , format );
393+ multiKey = analysis .getMultiOriginAccessFileKey (destinationPointSetId , percentile );
394+ humanName = analysis .getSingleCutoffGridFileKey (analysis .humanName (), destinationsName , percentile , threshold , format ).path ;
395395 }
396396
397397 if (!fileStorage .exists (singleThresholdKey )) {
@@ -425,7 +425,7 @@ private Object getCsvResults (Request req, Response res) {
425425 throw AnalysisServerException .notFound ("This regional analysis does not contain CSV results of type " + resultType );
426426 }
427427
428- FileStorageKey fileStorageKey = RegionalAnalysis .getCsvResultFileKey (analysis . _id , resultType );
428+ FileStorageKey fileStorageKey = analysis .getCsvResultFileKey (resultType );
429429
430430 // TODO handle JSON with human name on UI side
431431 // res.type(APPLICATION_JSON.asString());
@@ -452,13 +452,6 @@ private RegionalAnalysis createRegionalAnalysis (Request req, Response res) thro
452452 analysisRequest .makeTauiSite = true ;
453453 }
454454
455- if (analysisRequest .name .contains ("MULTI_CUTOFF" )) {
456- // Hidden feature: allows us to test multiple cutoffs and percentiles without modifying UI.
457- // These arrays could also be sent in the API payload. Either way, they will override any single cutoff.
458- analysisRequest .cutoffsMinutes = DEFAULT_CUTOFFS ;
459- analysisRequest .percentiles = DEFAULT_REGIONAL_PERCENTILES ;
460- }
461-
462455 // Create an internal RegionalTask and RegionalAnalysis from the AnalysisRequest sent by the client.
463456 // TODO now this is setting cutoffs and percentiles in the regional (template) task.
464457 // why is some stuff set in this populate method, and other things set here in the caller?
@@ -509,7 +502,6 @@ private RegionalAnalysis createRegionalAnalysis (Request req, Response res) thro
509502
510503 // Set the origin pointset key if an ID is specified. Currently this will always be a freeform pointset.
511504 // Also load this freeform origin pointset instance itself, so broker can see point coordinates, ids etc.
512-
513505 if (analysisRequest .originPointSetId != null ) {
514506 task .originPointSetKey = Persistence .opportunityDatasets
515507 .findByIdIfPermitted (analysisRequest .originPointSetId , userPermissions ).storageLocation ();
@@ -602,32 +594,25 @@ private RegionalAnalysis createRegionalAnalysis (Request req, Response res) thro
602594 regionalAnalysis .workerVersion = analysisRequest .workerVersion ;
603595 regionalAnalysis .zoom = task .zoom ;
604596
605- // Store the full array of multiple cutoffs.
606- checkNotNull (analysisRequest .cutoffsMinutes );
607- checkArgument (analysisRequest .cutoffsMinutes .length > 0 );
597+ // Store the full array of multiple cutoffs and percentiles.
608598 regionalAnalysis .cutoffsMinutes = analysisRequest .cutoffsMinutes ;
609-
610- // Same process as for cutoffsMinutes, but for percentiles.
611- checkNotNull (analysisRequest .percentiles );
612- checkArgument (analysisRequest .percentiles .length > 0 );
613599 regionalAnalysis .travelTimePercentiles = analysisRequest .percentiles ;
614600
615601 // Persist this newly created RegionalAnalysis to Mongo.
616- // This assigns it creation/update time stamps and an ID, which is needed to name any output CSV files.
602+ // This assigns it creation/update time stamps and an ID, which is needed to name any output files.
617603 regionalAnalysis = Persistence .regionalAnalyses .create (regionalAnalysis );
618604
619605 // Set the job ID on the task, which is used by the MultiOriginAssembler and Broker.
620606 task .jobId = regionalAnalysis ._id ;
621607
622- // Create the result writers
608+ // Create the result writers. The file names need the job ID.
623609 Map <FileStorageKey , BaseResultWriter > resultWriters = new HashMap <>();
624610 if (task .originPointSet == null ) {
625611 WebMercatorExtents extents = task .getWebMercatorExtents ();
626612 for (int destinationsIndex = 0 ; destinationsIndex < task .destinationPointSetKeys .length ; destinationsIndex ++) {
627613 for (int percentilesIndex = 0 ; percentilesIndex < task .percentiles .length ; percentilesIndex ++) {
628614 if (task .recordAccessibility ) {
629- FileStorageKey fileKey = RegionalAnalysis .getMultiOriginAccessFileKey (
630- task .jobId ,
615+ FileStorageKey fileKey = regionalAnalysis .getMultiOriginAccessFileKey (
631616 regionalAnalysis .destinationPointSetIds [destinationsIndex ],
632617 task .percentiles [percentilesIndex ]
633618 );
@@ -641,8 +626,7 @@ private RegionalAnalysis createRegionalAnalysis (Request req, Response res) thro
641626 }
642627
643628 if (task .includeTemporalDensity ) {
644- FileStorageKey fileKey = RegionalAnalysis .getMultiOriginDualAccessFileKey (
645- task .jobId ,
629+ FileStorageKey fileKey = regionalAnalysis .getMultiOriginDualAccessFileKey (
646630 regionalAnalysis .destinationPointSetIds [destinationsIndex ],
647631 task .percentiles [percentilesIndex ]
648632 );
@@ -659,26 +643,26 @@ private RegionalAnalysis createRegionalAnalysis (Request req, Response res) thro
659643 } else {
660644 if (task .recordAccessibility ) {
661645 // Freeform origins - create CSV regional analysis results
662- FileStorageKey fileKey = RegionalAnalysis .getCsvResultFileKey (task . jobId , CsvResultType .ACCESS );
646+ FileStorageKey fileKey = regionalAnalysis .getCsvResultFileKey (CsvResultType .ACCESS );
663647 resultWriters .put (fileKey , new AccessCsvResultWriter (task ));
664648 regionalAnalysis .resultStorage .put (CsvResultType .ACCESS , fileKey .path );
665649 }
666650
667651 if (task .includeTemporalDensity ) {
668- FileStorageKey fileKey = RegionalAnalysis .getCsvResultFileKey (task . jobId , CsvResultType .TDENSITY );
652+ FileStorageKey fileKey = regionalAnalysis .getCsvResultFileKey (CsvResultType .TDENSITY );
669653 resultWriters .put (fileKey , new TemporalDensityCsvResultWriter (task ));
670654 regionalAnalysis .resultStorage .put (CsvResultType .TDENSITY , fileKey .path );
671655 }
672656 }
673657
674658 if (task .recordTimes ) {
675- FileStorageKey fileKey = RegionalAnalysis .getCsvResultFileKey (task . jobId , CsvResultType .TIMES );
659+ FileStorageKey fileKey = regionalAnalysis .getCsvResultFileKey (CsvResultType .TIMES );
676660 resultWriters .put (fileKey , new TimeCsvResultWriter (task ));
677661 regionalAnalysis .resultStorage .put (CsvResultType .TIMES , fileKey .path );
678662 }
679663
680664 if (task .includePathResults ) {
681- FileStorageKey fileKey = RegionalAnalysis .getCsvResultFileKey (task . jobId , CsvResultType .PATHS );
665+ FileStorageKey fileKey = regionalAnalysis .getCsvResultFileKey (CsvResultType .PATHS );
682666 resultWriters .put (fileKey , new PathCsvResultWriter (task ));
683667 regionalAnalysis .resultStorage .put (CsvResultType .PATHS , fileKey .path );
684668 }
@@ -705,7 +689,7 @@ private RegionalAnalysis updateRegionalAnalysis (Request request, Response respo
705689 }
706690
707691 private void storeScenarioJson (RegionalAnalysis regionalAnalysis , Scenario scenario ) {
708- FileStorageKey fileStorageKey = RegionalAnalysis .getScenarioJsonFileKey (regionalAnalysis . _id , scenario .id );
692+ FileStorageKey fileStorageKey = regionalAnalysis .getScenarioJsonFileKey (scenario .id );
709693 try {
710694 File localScenario = FileUtils .createScratchFile ("json" );
711695 JsonUtil .objectMapper .writeValue (localScenario , scenario );
0 commit comments